blob: 21d1c0b6dbb92cf52bc08c59a20c4f14a32833d3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2018 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* E.D.Willink - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.examples.test.xtext;
import java.math.BigInteger;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.jdt.annotation.NonNull;
/**
* Tests that exercise the Xtext OCL Console using simple Ecore models.
*/
public class EcoreConsoleTests extends AbstractConsoleTests
{
public static final @NonNull String ORG_ECLIPSE_OCL_EXAMPLES_XTEXT_TESTRESULTS = "org.eclipse.ocl.examples.xtext.tests";
@Override
protected void setUp() throws Exception {
String testProjectPath = /*EMFPlugin.IS_ECLIPSE_RUNNING ? testProjectName :*/ ORG_ECLIPSE_OCL_EXAMPLES_XTEXT_TESTRESULTS;
doDelete(testProjectPath);
super.setUp();
}
public void testConsole_Ecore() throws Exception {
assertConsoleResult(consolePage, EcorePackage.Literals.ECLASS, "self.name", "'EClass'\n");
// assertConsoleResult(consolePage, EcorePackage.Literals.ECLASS, "self.instanceType.eAttributes.name", "");
// assertConsoleResult(consolePage, EcorePackage.Literals.ECLASS, "self.ownedAttribute.name->iterate(s : String ; acc : String = '' | acc + ' ' + s)", "' abstract interface'");
}
public void testConsole_OCLinEcoreTutorial() throws Exception {
doDelete(PLUGIN_ID);
ResourceSet resourceSet = new ResourceSetImpl(); // Emulate the separate Ecore Editor's AdapterFactoryEditingDomainResourceSet
URI testModelURI = getTestModelURI("models/documentation/OCLinEcoreTutorialForPivot.xmi");
Resource xmiResource = resourceSet.getResource(testModelURI, true);
EObject xmiLibrary = xmiResource.getContents().get(0);
EClass ecoreLibrary = xmiLibrary.eClass();
EStructuralFeature ecoreBooks = ecoreLibrary.getEStructuralFeature("books");
EStructuralFeature ecoreLoans = ecoreLibrary.getEStructuralFeature("loans");
EClass ecoreBook = (EClass) ecoreBooks.getEType();
EClass ecoreLoan = (EClass) ecoreLoans.getEType();
EStructuralFeature bookName = ecoreBook.getEStructuralFeature("name");
EStructuralFeature loanBook = ecoreLoan.getEStructuralFeature("book");
EStructuralFeature bookCopies = ecoreBook.getEStructuralFeature("copies");
@SuppressWarnings("unchecked")
List<EObject> xmiBooks = (List<EObject>) xmiLibrary.eGet(ecoreBooks);
EObject b1Book = null;
EObject b2Book = null;
for (EObject xmiBook : xmiBooks) {
if (xmiBook.eGet(bookName).equals("b1")) {
b1Book = xmiBook;
}
else if (xmiBook.eGet(bookName).equals("b2")) {
b2Book = xmiBook;
}
}
if (b2Book == null) {
fail();
return;
}
@SuppressWarnings("unchecked")
EObject aLoan = ((List<EObject>) xmiLibrary.eGet(ecoreLoans)).get(0);
//
assertConsoleResult(consolePage, xmiLibrary, "books->sortedBy(name)", "Library lib::Book b1\nLibrary lib::Book b2\n");
assertConsoleResult(consolePage, xmiLibrary, "isAvailable()", "<b><error>Parsing failure\n</error></b><error>\n1:1: Unresolved Operation '::isAvailable()'\n</error>");
assertConsoleResult(consolePage, b2Book, "isAvailable()", "false\n");
assertConsoleResult(consolePage, b1Book, "isAvailable()", "true\n");
aLoan.eSet(loanBook, b1Book);
assertConsoleResult(consolePage, b2Book, "isAvailable()", "false\n");
assertConsoleResult(consolePage, b1Book, "isAvailable()", "false\n");
b2Book.eSet(bookCopies, BigInteger.valueOf(3));
assertConsoleResult(consolePage, b2Book, "isAvailable()", "true\n");
assertConsoleResult(consolePage, b1Book, "isAvailable()", "false\n");
//
assertConsoleResult(consolePage, ecoreBook, "name", "'Book'\n");
assertConsoleResult(consolePage, ecoreBook, "copies", "<b><error>Parsing failure\n</error></b><error>\n1:1: Unresolved Property '::copies'\n</error>");
assertConsoleResult(consolePage, ecoreBook, "oclType().ownedProperties->sortedBy(name)",
"ecore::EClass::EClass\n" +
"ecore::EClass::EClass\n" +
"ecore::EClass::EReference\n" +
"ecore::EClass::abstract\n" +
"ecore::EClass::eAllAttributes\n" +
"ecore::EClass::eAllContainments\n" +
"ecore::EClass::eAllGenericSuperTypes\n" +
"ecore::EClass::eAllOperations\n" +
"ecore::EClass::eAllReferences\n" +
"ecore::EClass::eAllStructuralFeatures\n" +
"ecore::EClass::eAllSuperTypes\n" +
"ecore::EClass::eAttributes\n" +
"ecore::EClass::eGenericSuperTypes\n" +
"ecore::EClass::eIDAttribute\n" +
"ecore::EClass::eOperations\n" +
"ecore::EClass::eReferences\n" +
"ecore::EClass::eStructuralFeatures\n" +
"ecore::EClass::eSuperTypes\n" +
"ecore::EClass::interface\n");
}
}