Author: jdcasey Date: Wed Aug 29 22:25:08 2012 New Revision: 1378758 URL: http://svn.apache.org/viewvc?rev=1378758&view=rev Log: adding test for BourneShell
Added: maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/cli/shell/ maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/cli/shell/BourneShellTest.java (with props) Added: maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/cli/shell/BourneShellTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/cli/shell/BourneShellTest.java?rev=1378758&view=auto ============================================================================== --- maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/cli/shell/BourneShellTest.java (added) +++ maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/cli/shell/BourneShellTest.java Wed Aug 29 22:25:08 2012 @@ -0,0 +1,197 @@ +package org.apache.maven.shared.utils.cli.shell; + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.cli.Commandline; + +import java.util.Arrays; +import java.util.List; + +import junit.framework.TestCase; + +public class BourneShellTest + extends TestCase +{ + + protected Shell newShell() + { + return new BourneShell(); + } + + public void testQuoteWorkingDirectoryAndExecutable() + { + Shell sh = newShell(); + + sh.setWorkingDirectory( "/usr/local/bin" ); + sh.setExecutable( "chmod" ); + + String executable = StringUtils.join( sh.getShellCommandLine( new String[]{} ).iterator(), " " ); + + assertEquals( "/bin/sh -c cd /usr/local/bin && chmod", executable ); + } + + public void testQuoteWorkingDirectoryAndExecutable_WDPathWithSingleQuotes() + { + Shell sh = newShell(); + + sh.setWorkingDirectory( "/usr/local/'something else'" ); + sh.setExecutable( "chmod" ); + + String executable = StringUtils.join( sh.getShellCommandLine( new String[]{} ).iterator(), " " ); + + assertEquals( "/bin/sh -c cd \"/usr/local/\'something else\'\" && chmod", executable ); + } + + public void testQuoteWorkingDirectoryAndExecutable_WDPathWithSingleQuotes_BackslashFileSep() + { + Shell sh = newShell(); + + sh.setWorkingDirectory( "\\usr\\local\\'something else'" ); + sh.setExecutable( "chmod" ); + + String executable = StringUtils.join( sh.getShellCommandLine( new String[]{} ).iterator(), " " ); + + assertEquals( "/bin/sh -c cd \"\\usr\\local\\\'something else\'\" && chmod", executable ); + } + + public void testPreserveSingleQuotesOnArgument() + { + Shell sh = newShell(); + + sh.setWorkingDirectory( "/usr/bin" ); + sh.setExecutable( "chmod" ); + + String[] args = { "\'some arg with spaces\'" }; + + List shellCommandLine = sh.getShellCommandLine( args ); + + String cli = StringUtils.join( shellCommandLine.iterator(), " " ); + System.out.println( cli ); + assertTrue( cli.endsWith( args[0] ) ); + } + + public void testAddSingleQuotesOnArgumentWithSpaces() + { + Shell sh = newShell(); + + sh.setWorkingDirectory( "/usr/bin" ); + sh.setExecutable( "chmod" ); + + String[] args = { "some arg with spaces" }; + + List shellCommandLine = sh.getShellCommandLine( args ); + + String cli = StringUtils.join( shellCommandLine.iterator(), " " ); + System.out.println( cli ); + assertTrue( cli.endsWith( "\'" + args[0] + "\'" ) ); + } + + public void testArgumentsWithsemicolon() + { + + System.out.println( "---- semi colon tests ----" ); + + Shell sh = newShell(); + + sh.setWorkingDirectory( "/usr/bin" ); + sh.setExecutable( "chmod" ); + + String[] args = { ";some&argwithunix$chars" }; + + List shellCommandLine = sh.getShellCommandLine( args ); + + String cli = StringUtils.join( shellCommandLine.iterator(), " " ); + System.out.println( cli ); + assertTrue( cli.endsWith( "\'" + args[0] + "\'" ) ); + + Commandline commandline = new Commandline( newShell() ); + commandline.setExecutable( "chmod" ); + commandline.getShell().setQuotedArgumentsEnabled( true ); + commandline.createArg().setValue( "--password" ); + commandline.createArg().setValue( ";password" ); + + String[] lines = commandline.getShellCommandline(); + System.out.println( Arrays.asList( lines ) ); + + assertEquals( "/bin/sh", lines[0] ); + assertEquals( "-c", lines[1] ); + assertEquals( "chmod --password ';password'", lines[2] ); + + commandline = new Commandline( newShell() ); + commandline.setExecutable( "chmod" ); + commandline.getShell().setQuotedArgumentsEnabled( true ); + commandline.createArg().setValue( "--password" ); + commandline.createArg().setValue( ";password" ); + lines = commandline.getShellCommandline(); + System.out.println( Arrays.asList( lines ) ); + + assertEquals( "/bin/sh", lines[0] ); + assertEquals( "-c", lines[1] ); + assertEquals( "chmod --password ';password'", lines[2] ); + + commandline = new Commandline( new CmdShell() ); + commandline.getShell().setQuotedArgumentsEnabled( true ); + commandline.createArg().setValue( "--password" ); + commandline.createArg().setValue( ";password" ); + lines = commandline.getShellCommandline(); + System.out.println( Arrays.asList( lines ) ); + + assertEquals( "cmd.exe", lines[0] ); + assertEquals( "/X", lines[1] ); + assertEquals( "/C", lines[2] ); + assertEquals( "\"--password ;password\"", lines[3] ); + } + + public void testBourneShellQuotingCharacters() + throws Exception + { + // { ' ', '$', ';', '&', '|', '<', '>', '*', '?', '(', ')' }; + // test with values http://steve-parker.org/sh/bourne.shtml Appendix B - Meta-characters and Reserved Words + Commandline commandline = new Commandline( newShell() ); + commandline.setExecutable( "chmod" ); + commandline.getShell().setQuotedArgumentsEnabled( true ); + commandline.createArg().setValue( " " ); + commandline.createArg().setValue( "|" ); + commandline.createArg().setValue( "&&" ); + commandline.createArg().setValue( "||" ); + commandline.createArg().setValue( ";" ); + commandline.createArg().setValue( ";;" ); + commandline.createArg().setValue( "&" ); + commandline.createArg().setValue( "()" ); + commandline.createArg().setValue( "<" ); + commandline.createArg().setValue( "<<" ); + commandline.createArg().setValue( ">" ); + commandline.createArg().setValue( ">>" ); + commandline.createArg().setValue( "*" ); + commandline.createArg().setValue( "?" ); + commandline.createArg().setValue( "[" ); + commandline.createArg().setValue( "]" ); + commandline.createArg().setValue( "{" ); + commandline.createArg().setValue( "}" ); + commandline.createArg().setValue( "`" ); + + String[] lines = commandline.getShellCommandline(); + System.out.println( Arrays.asList( lines ) ); + + assertEquals( "/bin/sh", lines[0] ); + assertEquals( "-c", lines[1] ); + assertEquals( "chmod ' ' '|' '&&' '||' ';' ';;' '&' '()' '<' '<<' '>' '>>' '*' '?' '[' ']' '{' '}' '`'", + lines[2] ); + + } + +} Propchange: maven/shared/trunk/maven-shared-utils/src/test/java/org/apache/maven/shared/utils/cli/shell/BourneShellTest.java ------------------------------------------------------------------------------ svn:eol-style = native