View Javadoc
1   package org.apache.maven.shared.utils.cli;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.Arrays;
23  import java.util.HashMap;
24  import java.util.Locale;
25  import java.util.Map;
26  import java.util.Properties;
27  import org.apache.maven.shared.utils.Os;
28  
29  import junit.framework.TestCase;
30  
31  @SuppressWarnings( { "JavaDoc", "deprecation" } )
32  public class CommandLineUtilsTest
33      extends TestCase
34  {
35  
36  
37      /**
38       * Tests that case-insensitive environment variables are normalized to upper case.
39       */
40      public void testGetSystemEnvVarsCaseInsensitive()
41      {
42          Properties vars = CommandLineUtils.getSystemEnvVars( false );
43          for ( Object o : vars.keySet() )
44          {
45              String variable = (String) o;
46              assertEquals( variable.toUpperCase( Locale.ENGLISH ), variable );
47          }
48      }
49  
50      public void testEnsureCaseSensitivity()
51          throws Exception
52      {
53          Map<String, String> data = new HashMap<String, String>();
54          data.put( "abz", "cool" );
55          assertTrue( CommandLineUtils.ensureCaseSensitivity( data, false ).containsKey( "ABZ" ) );
56          assertTrue( CommandLineUtils.ensureCaseSensitivity( data, true ).containsKey( "abz" ) );
57      }
58  
59      /**
60       * Tests that environment variables on Windows are normalized to upper case. Does nothing on Unix platforms.
61       */
62      public void testGetSystemEnvVarsWindows()
63          throws Exception
64      {
65          if ( !Os.isFamily( Os.FAMILY_WINDOWS ) )
66          {
67              return;
68          }
69          Properties vars = CommandLineUtils.getSystemEnvVars();
70          for ( Object o : vars.keySet() )
71          {
72              String variable = (String) o;
73              assertEquals( variable.toUpperCase( Locale.ENGLISH ), variable );
74          }
75      }
76  
77      /**
78       * Tests the splitting of a command line into distinct arguments.
79       */
80      public void testTranslateCommandline()
81          throws Exception
82      {
83          assertCmdLineArgs( new String[] {}, null );
84          assertCmdLineArgs( new String[] {}, "" );
85  
86          assertCmdLineArgs( new String[] { "foo", "bar" }, "foo bar" );
87          assertCmdLineArgs( new String[] { "foo", "bar" }, "   foo   bar   " );
88  
89          assertCmdLineArgs( new String[] { "foo", " double quotes ", "bar" }, "foo \" double quotes \" bar" );
90          assertCmdLineArgs( new String[] { "foo", " single quotes ", "bar" }, "foo ' single quotes ' bar" );
91  
92          assertCmdLineArgs( new String[] { "foo", " \" ", "bar" }, "foo ' \" ' bar" );
93          assertCmdLineArgs( new String[] { "foo", " ' ", "bar" }, "foo \" ' \" bar" );
94      }
95  
96      private void assertCmdLineArgs( String[] expected, String cmdLine )
97          throws Exception
98      {
99          String[] actual = CommandLineUtils.translateCommandline( cmdLine );
100         assertNotNull( actual );
101         assertEquals( expected.length, actual.length );
102         assertEquals( Arrays.asList( expected ), Arrays.asList( actual ) );
103     }
104 
105 }