2
* The Apache Software License, Version 1.1
4
* Copyright (c) 2000 The Apache Software Foundation. All rights
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
14
* 2. Redistributions in binary form must reproduce the above copyright
15
* notice, this list of conditions and the following disclaimer in
16
* the documentation and/or other materials provided with the
19
* 3. The end-user documentation included with the redistribution, if
20
* any, must include the following acknowlegement:
21
* "This product includes software developed by the
22
* Apache Software Foundation (http://www.apache.org/)."
23
* Alternately, this acknowlegement may appear in the software itself,
24
* if and wherever such third-party acknowlegements normally appear.
26
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
27
* Foundation" must not be used to endorse or promote products derived
28
* from this software without prior written permission. For written
29
* permission, please contact apache@apache.org.
31
* 5. Products derived from this software may not be called "Apache"
32
* nor may "Apache" appear in their names without prior written
33
* permission of the Apache Group.
35
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47
* ====================================================================
49
* This software consists of voluntary contributions made by many
50
* individuals on behalf of the Apache Software Foundation. For more
51
* information on the Apache Software Foundation, please see
52
* <http://www.apache.org/>.
55
package org.apache.tools.ant.types;
57
import org.apache.tools.ant.BuildException;
59
import junit.framework.TestCase;
60
import junit.framework.AssertionFailedError;
65
* JUnit 3 testcases for org.apache.tools.ant.CommandLine
67
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
69
public class CommandlineTest extends TestCase {
71
public CommandlineTest(String name) {
75
public void testTokenizer() {
76
String[] s = Commandline.translateCommandline("1 2 3");
77
assertEquals("Simple case", 3, s.length);
78
for (int i=0; i<3; i++) {
79
assertEquals(""+(i+1), s[i]);
82
s = Commandline.translateCommandline("");
83
assertEquals("empty string", 0, s.length);
85
s = Commandline.translateCommandline(null);
86
assertEquals("null", 0, s.length);
88
s = Commandline.translateCommandline("1 \'2\' 3");
89
assertEquals("Simple case with single quotes", 3, s.length);
90
assertEquals("Single quotes have been stripped", "2", s[1]);
92
s = Commandline.translateCommandline("1 \"2\" 3");
93
assertEquals("Simple case with double quotes", 3, s.length);
94
assertEquals("Double quotes have been stripped", "2", s[1]);
96
s = Commandline.translateCommandline("1 \"2 3\" 4");
97
assertEquals("Case with double quotes and whitespace", 3, s.length);
98
assertEquals("Double quotes stripped, space included", "2 3", s[1]);
100
s = Commandline.translateCommandline("1 \"2\'3\" 4");
101
assertEquals("Case with double quotes around single quote", 3, s.length);
102
assertEquals("Double quotes stripped, single quote included", "2\'3",
105
s = Commandline.translateCommandline("1 \'2 3\' 4");
106
assertEquals("Case with single quotes and whitespace", 3, s.length);
107
assertEquals("Single quotes stripped, space included", "2 3", s[1]);
109
s = Commandline.translateCommandline("1 \'2\"3\' 4");
110
assertEquals("Case with single quotes around double quote", 3, s.length);
111
assertEquals("Single quotes stripped, double quote included", "2\"3",
114
// \ doesn't have a special meaning anymore - this is different from
115
// what the Unix sh does but causes a lot of problems on DOS
116
// based platforms otherwise
117
s = Commandline.translateCommandline("1 2\\ 3 4");
118
assertEquals("case with quoted whitespace", 4, s.length);
119
assertEquals("backslash included", "2\\", s[1]);
122
// now to the expected failures
125
s = Commandline.translateCommandline("a \'b c");
126
fail("unbalanced single quotes undetected");
127
} catch (BuildException be) {
128
assertEquals("unbalanced quotes in a \'b c", be.getMessage());
132
s = Commandline.translateCommandline("a \"b c");
133
fail("unbalanced double quotes undetected");
134
} catch (BuildException be) {
135
assertEquals("unbalanced quotes in a \"b c", be.getMessage());
139
public void testToString() {
140
assertEquals("", Commandline.toString(new String[0]));
141
assertEquals("", Commandline.toString(null));
142
assertEquals("1 2 3", Commandline.toString(new String[] {"1", "2", "3"}));
143
assertEquals("1 \"2 3\"", Commandline.toString(new String[] {"1", "2 3"}));
144
assertEquals("1 \"2\'3\"", Commandline.toString(new String[] {"1", "2\'3"}));
145
assertEquals("1 \'2\"3\'", Commandline.toString(new String[] {"1", "2\"3"}));