/** Tests the nested name accesses */ @Test public void test_nested_names() throws InvocationTargetException { TestOCL ocl = createOCL(); initFruitPackage(ocl); MetamodelManagerInternal metamodelManager = ocl.getMetamodelManager(); IdResolver idResolver = ocl.getIdResolver(); org.eclipse.ocl.pivot.Class appleType = metamodelManager.getASOfEcore(org.eclipse.ocl.pivot.Class.class, apple); // // Simple model: appleTree contains redApple // EObject redApple = fruitEFactory.create(apple); redApple.eSet(fruit_color, color_red); redApple.eSet(fruit_name, "RedApple"); EObject appleTree = fruitEFactory.create(tree); appleTree.eSet(tree_name, "AppleTree"); @SuppressWarnings("unchecked") List<Object> treeFruits = (List<Object>) appleTree.eGet(tree_fruits); treeFruits.add(redApple); // ocl.assertQueryEquals(redApple, "RedApple", "self.name"); ocl.assertQueryEquals(redApple, "RedApple", "self.Fruit::name"); ocl.assertQueryEquals(redApple, "RedApple", "self.Apple::name"); ocl.assertValidationErrorQuery( appleType, "self.Tree::name", PivotMessages.ValidationConstraintIsNotSatisfied_ERROR_, PivotTables.STR_PropertyCallExp_c_c_NonStaticSourceTypeIsConformant, "self.name"); ocl.assertQueryEquals(redApple, redApple, "self.oclAsType(Apple)"); ocl.assertQueryEquals(redApple, redApple, "self.oclAsType(fruit::Apple)"); ocl.assertQueryEquals( redApple, idResolver.createSetOfEach(null, redApple), "self->oclAsType(Set(Fruit))"); ocl.assertQueryEquals( redApple, idResolver.createSetOfEach(null, redApple), "self->oclAsType(Set(fruit::Apple))"); ocl.assertSemanticErrorQuery( appleType, "self.oclAsType(fruit::fruit::Apple)", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "fruit"); // Demonstrates Bug 353985 ocl.assertSemanticErrorQuery( appleType, "self->oclAsType(Set(fruit::apple::BadApple))", PivotMessagesInternal.UnresolvedType_ERROR_, "", "BadApple"); ocl.assertSemanticErrorQuery( appleType, "self->oclAsType(Set(fruit::apple::BadApple))", PivotMessagesInternal.UnresolvedType_ERROR_, "", "BadApple"); ocl.assertSemanticErrorQuery( appleType, "self->oclAsType(Set(fruit::badapple::BadApple))", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "badapple"); ocl.assertSemanticErrorQuery( appleType, "self->oclAsType(Set(badfruit::badapple::BadApple))", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "badfruit"); ocl.assertQueryInvalid(redApple, "self->oclAsType(Set(fruit::apple::EatingApple))"); ocl.assertQueryInvalid(redApple, "self->oclAsType(Set(fruit::Tree))"); // ocl.assertQueryEquals( redApple, idResolver.createSetOfEach(null, appleTree), "Tree.allInstances()"); ocl.assertQueryEquals( redApple, idResolver.createSetOfEach(null, appleTree), "fruit::Tree.allInstances()"); ocl.assertQueryEquals(null, ocl.getEmptySetValue(), "fruit::Tree.allInstances()"); // metamodelManager.addGlobalNamespace("zz", fruitPackage); ocl.assertQueryEquals( redApple, idResolver.createSetOfEach(null, appleTree), "zz::Tree.allInstances()"); // ocl.assertQueryEquals( redApple, idResolver.createBagOfEach(null, redApple), "Fruit.allInstances().oclAsType(Apple)"); ocl.assertQueryEquals( redApple, idResolver.createSetOfEach(null, redApple), "Fruit.allInstances()->oclAsType(Set(Apple))"); ocl.dispose(); }