/******************************************************************************* * Copyright (c) 2008 Olivier Moises * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Olivier Moises- initial API and implementation *******************************************************************************/ package org.eclipse.wazaabi.locationpaths.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.emf.ecore.impl.EObjectImpl; import org.eclipse.wazaabi.locationpaths.model.Pointer; import org.eclipse.wazaabi.locationpaths.nonosgi.LocationPathsHelper; import org.eclipse.wazaabi.locationpaths.runtime.Evaluator; import org.eclipse.wazaabi.locationpaths.runtime.LocationSelector; import org.junit.Before; import org.junit.Test; public class TestOneStep extends AbstractTest { public static class EObjectWithData extends EObjectImpl { private HashMap<String, Object> data = new HashMap<String, Object>(); public Object get(String key) { return data.get(key); } public void set(String key, Object value) { data.put(key, value); } }; @Before public void setUp() throws Exception { LocationPathsHelper.init(); } @Test public void testInitialContextWithEClassifier() { String path = "eClassifier(\"" + EcorePackage.eINSTANCE.getNsURI() + "\", \"" + EcorePackage.Literals.EPACKAGE.getName() + "\")/@name"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(EcorePackage.Literals.EPACKAGE.getName(), objects.get(0)); } @Test public void testAbbreviatedAttributeAxis() { String path = "@name"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(ROOT_EPACKAGE_NAME, objects.get(0)); } @Test public void testAttributeAxis() { String path = "attribute::name"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(ROOT_EPACKAGE_NAME, objects.get(0)); } @Test public void testAbbreviatedReferenceAxis() { String path = "&eClassifiers"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(getTestEPackage().getEClassifiers().size(), objects.size()); for (int i = 0; i < getTestEPackage().getEClassifiers().size(); i++) assertEquals(getTestEPackage().getEClassifiers().get(i), objects.get(i)); } @Test public void testReferenceAxis() { String path = "reference::eClassifiers"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(getTestEPackage().getEClassifiers().size(), objects.size()); for (int i = 0; i < getTestEPackage().getEClassifiers().size(); i++) assertEquals(getTestEPackage().getEClassifiers().get(i), objects.get(i)); } @Test public void testAbbreviatedReferencePathWithPredicateEquality() { String path = "&eClassifiers[ @name = \"" + getTestEPackage().getEClassifiers().get(1).getName() + "\"]"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage().getEClassifiers().get(1), objects.get(0)); } @Test public void testReferencePathWithPredicateEquality() { String path = "reference::eClassifiers[ @name = \"" + getTestEPackage().getEClassifiers().get(1).getName() + "\"]"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage().getEClassifiers().get(1), objects.get(0)); } @Test public void testAbbreviatedChildAxis() { String path = "EPackage"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(getTestEPackage().getESubpackages().size(), objects.size()); for (int i = 0; i < getTestEPackage().getESubpackages().size(); i++) assertEquals(getTestEPackage().getESubpackages().get(i), objects.get(i)); } @Test public void testChildAxis() { String path = "child::EPackage"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(getTestEPackage().getESubpackages().size(), objects.size()); for (int i = 0; i < getTestEPackage().getESubpackages().size(); i++) assertEquals(getTestEPackage().getESubpackages().get(i), objects.get(i)); } @Test public void testAbreviatedParentAxis() { String path = ".."; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage() .getEClassifiers().get(0), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage(), objects.get(0)); } @Test public void testParentAxis() { String path = "parent::node()"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage() .getEClassifiers().get(0), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage(), objects.get(0)); } @Test public void testAbreviatedSelfAxis() { String path = "."; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage(), objects.get(0)); } @Test public void testSelfAxis() { String path = "self::node()"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage(), objects.get(0)); } @Test public void testAbreviatedVariableAxis() { EObjectWithData eObjectWithData = new EObjectWithData(); eObjectWithData.set("data", getTestEPackage()); //$NON-NLS-1$ String path = "$data"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector .select(eObjectWithData, path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage(), objects.get(0)); } @Test public void testVariableAxis() { EObjectWithData eObjectWithData = new EObjectWithData(); eObjectWithData.set("data", getTestEPackage()); //$NON-NLS-1$ String path = "variable::data"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector .select(eObjectWithData, path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage(), objects.get(0)); } @Test public void testClassAxis() { String path = "class::node()"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(EcorePackage.Literals.EPACKAGE, objects.get(0)); } @Test public void testPackageAxis1() { String path = "package::node()"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage() .getEClassifiers().get(0), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage(), objects.get(0)); } @Test public void testPackageAxis2() { String path = "package::node()"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(EcorePackage.eINSTANCE, objects.get(0)); } // DESCENDANT-OR-SELF : not implemented @Test public void testAbbreviatedReferencePathWithIndexAsPredicate() { String path = "&eClassifiers[1]"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage().getEClassifiers().get(1), objects.get(0)); } @Test public void testReferencePathWithIndexAsPredicate() { String path = "reference::eClassifiers[1]"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<Pointer<?>> result = LocationSelector.select(getTestEPackage(), path); assertNotNull(result); // we expect on list of EMFPointers assertEquals(1, result.size()); List<?> objects = Evaluator.evaluate(result.get(0)); assertNotNull(objects); assertEquals(1, objects.size()); assertEquals(getTestEPackage().getEClassifiers().get(1), objects.get(0)); } @Test public void testSelfOnListOfEObject() { // String path = "*"; //$NON-NLS-1$ String path = "reference::eClassifiers[1]"; //$NON-NLS-1$ System.out.println("testing \"" + path + "\""); //$NON-NLS-1$ $NON-NLS-2$ List<EObject> context = new ArrayList<EObject>(); context.addAll(getTestEPackage().getEClassifiers()); // List<Pointer<?>> result = LocationSelector.select(context, path); if (true) return; // try { // Method privateStringMethod = Evaluator.class.getDeclaredMethod( // "evaluate", new Class[] { Object.class, int.class, // String.class }); // privateStringMethod.setAccessible(true); // List<?> result = (List<?>) privateStringMethod.invoke(null, // new Object[] { getTestEPackage(), Axis.REFERENCE, // "eClassifiers" }); // System.err.println("--------------> " + result); // } catch (NoSuchMethodException e) { // e.printStackTrace(); // } catch (SecurityException e) { // e.printStackTrace(); // } catch (IllegalAccessException e) { // e.printStackTrace(); // } catch (IllegalArgumentException e) { // e.printStackTrace(); // } catch (InvocationTargetException e) { // e.printStackTrace(); // } // Evaluator.evaluate(context, Axis.SELF, "[0]"); // // List<Pointer<?>> result = LocationSelector.select(context, path); // assertNotNull(result); // // // we expect on list of EMFPointers // assertEquals(1, result.size()); // // List<?> objects = Evaluator.evaluate(result.get(0)); // assertNotNull(objects); // assertEquals(1, objects.size()); // // assertEquals(getTestEPackage().getEClassifiers().get(1), // objects.get(0)); } }