/*
* Copyright 2013-2015 Grzegorz Ligas <ligasgr@gmail.com> and other contributors
* (see the CONTRIBUTORS file).
*
* Licensed 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.intellij.xquery.psi;
import org.intellij.xquery.BaseFunctionalTestCase;
import java.util.Collection;
import static org.intellij.xquery.psi.XQueryElementFactory.createFile;
import static org.intellij.xquery.reference.namespace.XQuery30PredeclaredNamespaces.FN;
/**
* User: ligasgr
* Date: 01/08/13
* Time: 13:30
*/
public class XQueryFileTest extends BaseFunctionalTestCase {
public void testVariableDeclarations() {
XQueryFile file = aFile("declare variable $xxx := 'yyy';");
Collection<XQueryVarDecl> variables = file.getVariableDeclarations();
assertNotNull(variables);
assertEquals(1, variables.size());
XQueryVarDecl declaration = variables.iterator().next();
assertEquals("xxx", declaration.getVarName().getName());
assertEquals("'yyy'", declaration.getVarValue().getText());
}
public void testModuleImports() {
XQueryFile file = aFile("import module namespace dummy = 'file.xq'");
Collection<XQueryModuleImport> imports = file.getModuleImports();
assertNotNull(imports);
assertEquals(1, imports.size());
XQueryModuleImport moduleImport = imports.iterator().next();
assertEquals("dummy", moduleImport.getNamespacePrefix().getName());
assertEquals("'file.xq'", moduleImport.getModuleImportNamespace().getText());
}
public void testModuleNamespaceName() {
XQueryFile file = aFile("module namespace dummy = \"my\";");
XQueryNamespacePrefix name = file.getModuleNamespaceName();
assertNotNull(name);
assertEquals("dummy", name.getName());
}
public void testNamespaceDeclarations() {
XQueryFile file = aFile("declare namespace dummy = \"my\";");
Collection<XQueryNamespaceDecl> namespaceDeclarations = file.getNamespaceDeclarations();
assertNotNull(namespaceDeclarations);
assertEquals(1, namespaceDeclarations.size());
XQueryNamespaceDecl declaration = namespaceDeclarations.iterator().next();
assertEquals("dummy", declaration.getNamespacePrefix().getName());
}
public void testFunctionDeclarations() {
XQueryFile file = aFile("declare function dummy() {()};");
Collection<XQueryFunctionDecl> namespaceDeclarations = file.getFunctionDeclarations();
assertNotNull(namespaceDeclarations);
assertEquals(1, namespaceDeclarations.size());
XQueryFunctionDecl declaration = namespaceDeclarations.iterator().next();
assertEquals("dummy", declaration.getFunctionName().getName());
}
public void testDefaultFunctionNamespaceWhenNotDeclared() {
XQueryFile file = aFile("()");
String defaultFunctionNamespace = file.getDefaultFunctionNamespace();
assertEquals(FN.getNamespace(), defaultFunctionNamespace);
}
public void testDefaultFunctionNamespaceWhenDeclared() {
XQueryFile file = aFile("declare default function namespace 'xxx';()");
String defaultFunctionNamespace = file.getDefaultFunctionNamespace();
assertEquals("xxx", defaultFunctionNamespace);
}
public void testDefaultFunctionNamespaceWhenDeclaredEmpty() {
XQueryFile file = aFile("declare default function namespace '';()");
String defaultFunctionNamespace = file.getDefaultFunctionNamespace();
assertEquals("", defaultFunctionNamespace);
}
public void testNamespaceMappingsForPredeclaredNamespaces() {
XQueryFile file = aFile("()");
for (String key : file.getPrefixToNamespaceMap().keySet()) {
assertEquals(file.getPrefixToNamespaceMap().get(key), file.mapFunctionPrefixToNamespace(key));
}
}
public void testNamespaceMappingsWhenDefaultFunctionNamespaceNotDeclared() {
XQueryFile file = aFile("()");
assertEquals(FN.getNamespace(), file.mapFunctionPrefixToNamespace(null));
}
public void testNamespaceMappingsWhenDefaultFunctionNamespaceDeclared() {
XQueryFile file = aFile("declare default function namespace 'xxx';()");
assertEquals("xxx", file.mapFunctionPrefixToNamespace(null));
}
public void testNamespaceMappingsWhenNamespaceDeclared() {
XQueryFile file = aFile("declare namespace ex = 'xxx';");
assertEquals("xxx", file.mapFunctionPrefixToNamespace("ex"));
}
public void testNamespaceMappingsWhenModuleDeclared() {
XQueryFile file = aFile("module namespace ex = 'xxx';");
assertEquals("xxx", file.mapFunctionPrefixToNamespace("ex"));
}
public void testNamespaceMappingsWhenModuleImportedWithName() {
XQueryFile file = aFile("import module namespace ex = 'xxx';");
assertEquals("xxx", file.mapFunctionPrefixToNamespace("ex"));
}
public void testNamespaceMappingsWhenModuleImportedWithoutName() {
XQueryFile file = aFile("import module 'xxx';");
assertNull(file.mapFunctionPrefixToNamespace("ex"));
}
public void testNamespaceDeclarationsMatchingDefaultFunctionNamespace() {
XQueryFile file = aFile("declare default function namespace 'xxx';" +
"declare namespace yyy = '';" +
"declare namespace zzz = 'zzz';" +
"declare namespace aaa = 'xxx';" +
"declare namespace = 'xxx';" +
"()");
Collection<XQueryNamespaceDecl> results = file.getNamespaceDeclarationsMatchingDefaultNamespace();
assertEquals(1, results.size());
assertEquals("aaa", results.iterator().next().getNamespacePrefix().getText());
}
public void testContextItem() {
XQueryFile file = aFile("declare context item := ();");
assertNotNull(file.getContextItem());
}
public void testFunctionInvocationsForFunctionCall() {
XQueryFile file = aFile("test()");
Collection<XQueryFunctionInvocation> results = file.getFunctionInvocations();
assertEquals(1, results.size());
XQueryFunctionInvocation functionInvocation = results.iterator().next();
assertEquals("test", functionInvocation.getFunctionName().getText());
assertEquals(0, functionInvocation.getArity());
}
public void testFunctionInvocationsForNamedFunctionRef() {
XQueryFile file = aFile("test#1");
Collection<XQueryFunctionInvocation> results = file.getFunctionInvocations();
XQueryFunctionInvocation functionInvocation = results.iterator().next();
assertEquals("test", functionInvocation.getFunctionName().getText());
assertEquals(1, functionInvocation.getArity());
}
public void testVariableReferences() {
XQueryFile file = aFile("$test");
Collection<XQueryVarRef> results = file.getVariableReferences();
XQueryVarRef variableReference = results.iterator().next();
assertEquals("test", variableReference.getVarName().getText());
}
public void testVariableNames() {
XQueryFile file = aFile("$test");
Collection<XQueryVarName> results = file.getVariableNames();
XQueryVarName variableName = results.iterator().next();
assertEquals("test", variableName.getText());
}
private XQueryFile aFile(String content) {
return createFile(getProject(), content);
}
}