blob: 1f0a9e4c5baad87003923c50c1d212cdc0499cee [file] [log] [blame]
/*
* 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.
*/
package org.netbeans.modules.ant.grammar;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.netbeans.junit.NbTestCase;
import org.w3c.dom.Element;
// XXX testSpecials (what does this mean actually?)
// XXX testAddTarget
// XXX testDescriptionCanBeAddedOnlyOnce
/**
* Test functionality of AntGrammar.
* @author Jesse Glick
*/
public class AntGrammarTest extends NbTestCase {
public AntGrammarTest(String name) {
super(name);
}
private AntGrammar g;
protected @Override void setUp() throws Exception {
super.setUp();
g = new AntGrammar();
}
public void testTypeOf() throws Exception {
String simpleProject = "<project default='all'><target name='all'/></project>";
Element e = TestUtil.createElementInDocument(simpleProject, "project", null);
AntGrammar.ElementType type = AntGrammar.typeOf(e);
assertEquals(AntGrammar.Kind.PROJECT, type.kind);
// XXX other specials...
String projectWithTasks = "<project default='all'><target name='all'><echo>hello</echo></target></project>";
e = TestUtil.createElementInDocument(projectWithTasks, "echo", null);
type = AntGrammar.typeOf(e);
assertEquals(AntGrammar.Kind.TASK, type.kind);
assertEquals("org.apache.tools.ant.taskdefs.Echo", type.name);
String projectWithTypes = "<project default='all'><path id='foo'/><target name='all'/></project>";
e = TestUtil.createElementInDocument(projectWithTypes, "path", null);
type = AntGrammar.typeOf(e);
assertEquals(AntGrammar.Kind.TYPE, type.kind);
assertEquals("org.apache.tools.ant.types.Path", type.name);
// XXX more...
}
public void testTaskCompletion() throws Exception {
String p = "<project default='x'><target name='x'><ecHERE/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryElements(TestUtil.createCompletion(p)));
assertTrue("matched <echo>", l.contains("echo"));
// XXX more...
}
public void testTypeCompletion() throws Exception {
String p = "<project default='x'><target name='x'><paHERE/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryElements(TestUtil.createCompletion(p)));
assertTrue("matched <path>", l.contains("path"));
p = "<project default='x'><filHERE/><target name='x'/></project>";
l = TestUtil.grammarResultValues(g.queryElements(TestUtil.createCompletion(p)));
assertTrue("matched <fileset>", l.contains("fileset"));
// XXX more...
}
public void testRegularAttrCompletion() throws Exception {
String p = "<project default='x'><target name='x'><javac srcdHERE=''/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryAttributes(TestUtil.createCompletion(p)));
assertTrue("matched srcdir on <javac>: " + l, l.contains("srcdir"));
// XXX more...
}
public void testSpecialAttrCompletion() throws Exception {
String p = "<project default='x'><target nHERE=''/></project>";
List<String> l = TestUtil.grammarResultValues(g.queryAttributes(TestUtil.createCompletion(p)));
assertEquals("matched name on <target>", Collections.singletonList("name"), l);
p = "<project default='x'><target dHERE=''/></project>";
l = TestUtil.grammarResultValues(g.queryAttributes(TestUtil.createCompletion(p)));
Collections.sort(l);
assertEquals("matched depends and description on <target>", Arrays.asList("depends", "description"), l);
// XXX more...
}
public void testEnumeratedValueCompletion() throws Exception {
String p = "<project default='x'><target><echo level='vHERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertEquals("matched level='verbose' on <echo>", Collections.singletonList("verbose"), l);
}
public void testBooleanValueCompletion() throws Exception {
String p = "<project default='x'><target><echo append='HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
Collections.sort(l);
assertEquals("true or false for append on <echo>", Arrays.asList("false", "true"), l);
}
public void testStockProperties() throws Exception {
String p = "<project default='x'><target><echo message='${HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched ${ant.home}: " + l, l.contains("${ant.home}"));
assertTrue("matched ${basedir}: " + l, l.contains("${basedir}"));
assertTrue("matched ${java.home}: " + l, l.contains("${java.home}"));
}
public void testPropertiesWithoutBrace() throws Exception {
String p = "<project default='x'><target><echo message='$HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched ${basedir}: " + l, l.contains("${basedir}"));
}
public void testPropertiesInText() throws Exception {
String p = "<project default='x'><target><echo>basedir=${baseHERE</echo></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched ${basedir}: " + l, l.contains("dir}"));
}
public void testPropertiesInInterior() throws Exception {
String p = "<project default='x'><target><echo message='basedir=${baseHERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched ${basedir} after prefix: " + l, l.contains("basedir=${basedir}"));
p = "<project default='x'><target><echo message='foo=${foo} basedir=${baseHERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched ${basedir} after other props: " + l, l.contains("foo=${foo} basedir=${basedir}"));
p = "<project default='x'><target><echo>foo=${foo} basedir=${baseHERE</echo></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched ${basedir} after other props in text: " + l, l.contains("dir}"));
}
public void testAlreadyUsedProperties() throws Exception {
String p = "<project default='x'><target><echo message='${foo}'/><echo message='${HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched already used property ${foo}: " + l, l.contains("${foo}"));
p = "<project default='x'><target><echo message='${HERE'/></target><target><echo message='${foo}'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched property ${foo} used later: " + l, l.contains("${foo}"));
p = "<project default='x'><target><echo message='${HERE'/></target><target><echo>${foo}</echo></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched property ${foo} used in a text node: " + l, l.contains("${foo}"));
p = "<project default='x'><target><echo message='prefix${foo}suffix'/><echo message='${HERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched property ${foo} used inside a value: " + l, l.contains("${foo}"));
p = "<project default='x'><target><echo message='${foo}:${bar}'/><echo message='${HERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched property ${foo} used before another prop: " + l, l.contains("${foo}"));
assertTrue("matched property ${bar} used after another prop: " + l, l.contains("${bar}"));
}
public void testAddedProperties() throws Exception {
String p = "<project default='x'><property name='foo' value='whatever'/><target><echo message='${HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched defined property ${foo}: " + l, l.contains("${foo}"));
}
public void testImpliedProperties() throws Exception {
String p = "<project default='x'><target if='someprop'><echo message='${HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched property ${someprop} from <target if>: " + l, l.contains("${someprop}"));
p = "<project default='x'><target><junit errorproperty='failed'/><echo message='${HERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched property ${failed} from <junit errorproperty>: " + l, l.contains("${failed}"));
// XXX could also test other standard names
}
public void testImplicitProperties() throws Exception {
String p = "<project default='x'><target><buildnumber/><echo message='${HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("matched property ${build.number} from <buildnumber>: " + l, l.contains("${build.number}"));
// XXX could also test other standard names
}
public void testIndirectProperties() throws Exception {
String p = "<project default='x'><target><property name='${foo}' value='bar'/><echo message='${HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertFalse("did not match non-property ${${foo}}: " + l, l.contains("${${foo}}"));
}
public void testNonProperties() throws Exception {
String p = "<project default='x'><target><echo>${foo</echo><echo message='${HERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertFalse("did not match broken property ref '${foo': " + l, l.contains("${foo}"));
p = "<project default='x'><target><echo>$${foo}</echo><echo message='${HERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertFalse("did not match escaped property nonref '$${foo}': " + l, l.contains("${foo}"));
p = "<project default='x'><target><echo>${}</echo><echo message='${HERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertFalse("did not match empty property name: " + l, l.contains("${}"));
p = "<project default='x'><target><echo>$$${foo}</echo><echo message='${HERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("but '$$${foo}' is a property ref after an escaped shell: " + l, l.contains("${foo}"));
}
public void testNonCompletingProperties() throws Exception {
String p = "<project default='x'><target><echo message='$${baseHERE'/></target></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertFalse("did not match property non-ref $${basedir}: " + l, l.contains("$${basedir}"));
assertEquals("in fact there are no completions here", Collections.EMPTY_LIST, l);
p = "<project default='x'><target><echo message='$$${baseHERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("but did match property ref $$${basedir}: " + l, l.contains("$$${basedir}"));
p = "<project default='x'><target><echo message='${basedir}HERE'/></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertFalse("${basedir} is already complete: " + l, l.contains("${basedir}"));
assertEquals("in fact there are no completions here", Collections.emptyList(), l);
}
public void testCompleteImpliedProperties() throws Exception {
String p = "<project default='x'><target if='baseHERE'/></project>";
List<String> l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("completing <target if>: " + l, l.contains("basedir"));
p = "<project default='x'><target><condition><isset property='baseHERE'/></condition></target></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
assertTrue("completing <isset property>: " + l, l.contains("basedir"));
// XXX could also test other standard names
}
public void testImport() throws Exception {
String p = "<project default='x'><impHERE/></project>";
List<String> l = TestUtil.grammarResultValues(g.queryElements(TestUtil.createCompletion(p)));
assertTrue("matched <import>", l.contains("import"));
p = "<project default='x'><import fHERE=''/></project>";
l = TestUtil.grammarResultValues(g.queryAttributes(TestUtil.createCompletion(p)));
assertTrue("matched file on <import>: " + l, l.contains("file"));
p = "<project default='x'><import file='y' optHERE=''/></project>";
l = TestUtil.grammarResultValues(g.queryAttributes(TestUtil.createCompletion(p)));
assertTrue("matched optional on <import>: " + l, l.contains("optional"));
p = "<project default='x'><import file='y' optional='HERE'/></project>";
l = TestUtil.grammarResultValues(g.queryValues(TestUtil.createCompletion(p)));
Collections.sort(l);
assertEquals("true or false for optional on <import>", Arrays.asList("false", "true"), l);
}
}