/** * Copyright (c) 2009 TIBCO Software Inc. and others. * 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: * Adrian Price */ package org.eclipse.emf.test.core.ecore; import static org.eclipse.emf.test.models.switch1.Switch1Package.Literals.*; import static org.eclipse.emf.test.models.switch2.Switch2Package.Literals.*; import static org.eclipse.emf.test.models.switch3.Switch3Package.Literals.*; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.ComposedSwitch; import org.eclipse.emf.ecore.util.Switch; import org.eclipse.emf.test.models.switch1.EClass0; import org.eclipse.emf.test.models.switch1.EClass1; import org.eclipse.emf.test.models.switch1.util.Switch1Switch; import org.eclipse.emf.test.models.switch2.EClass2; import org.eclipse.emf.test.models.switch2.EClass3; import org.eclipse.emf.test.models.switch2.util.Switch2Switch; import org.eclipse.emf.test.models.switch3.EClass4; import org.eclipse.emf.test.models.switch3.EClass5; import org.eclipse.emf.test.models.switch3.util.Switch3Switch; public class SwitchTest extends TestCase { private static final class TestSwitch1 extends Switch1Switch<String> { @Override public String caseEClass0(EClass0 object) { return retval("TestSwitch1.caseEClass0", object); } @Override public String caseEClass1(EClass1 object) { return retval("TestSwitch1.caseEClass1", object); } @Override public String defaultCase(EObject object) { return retval("TestSwitch1.defaultCase", object); } } private static final class TestSwitch2 extends Switch2Switch<String> { @Override public String caseEClass0(EClass0 object) { return retval("TestSwitch2.caseEClass0", object); } @Override public String caseEClass1(EClass1 object) { return retval("TestSwitch2.caseEClass1", object); } @Override public String caseEClass2(EClass2 object) { return retval("TestSwitch2.caseEClass2", object); } @Override public String caseEClass3(EClass3 object) { return retval("TestSwitch2.caseEClass3", object); } @Override public String defaultCase(EObject object) { return retval("TestSwitch2.defaultCase", object); } } private static final class TestSwitch3 extends Switch3Switch<String> { @Override public String caseEClass0(EClass0 object) { return retval("TestSwitch3.caseEClass0", object); } @Override public String caseEClass1(EClass1 object) { return retval("TestSwitch3.caseEClass1", object); } @Override public String caseEClass2(EClass2 object) { return retval("TestSwitch3.caseEClass2", object); } @Override public String caseEClass3(EClass3 object) { return retval("TestSwitch3.caseEClass3", object); } @Override public String caseEClass4(EClass4 object) { return retval("TestSwitch3.caseEClass4", object); } @Override public String caseEClass5(EClass5 object) { return retval("TestSwitch3.caseEClass5", object); } @Override public String defaultCase(EObject object) { return retval("TestSwitch3.defaultCase", object); } } private static EObject[] eObjects; private static Switch<String> switch1; private static Switch<String> switch2; private static Switch<String> switch3; private static String retval(String prefix, EObject eObject) { return prefix + ": " + eObject.eClass().getName() + '@' + Integer.toHexString(System.identityHashCode(eObject)); } public static Test suite() { TestSuite ts = new TestSuite("SwitchTest"); ts.addTest(new SwitchTest("testSwitch1")); ts.addTest(new SwitchTest("testSwitch2")); ts.addTest(new SwitchTest("testSwitch3")); ts.addTest(new SwitchTest("testSwitch12")); ts.addTest(new SwitchTest("testSwitch13")); ts.addTest(new SwitchTest("testSwitch23")); ts.addTest(new SwitchTest("testSwitch123")); return ts; } public SwitchTest(String name) { super(name); } private void doSwitches(Switch<String> switchObject, String switchIdentifier, String[] expectedPrefixes) { for (int i = 0; i < eObjects.length; i++) { String actual = switchObject.doSwitch(eObjects[i]); assertEquals(switchIdentifier + ".doSwitch(EClass" + i + "); ", retval(expectedPrefixes[i], eObjects[i]), actual); } } @Override public void setUp() { if (switch1 == null) { switch1 = new TestSwitch1(); switch2 = new TestSwitch2(); switch3 = new TestSwitch3(); EClass[] eClasses = { ECLASS0, ECLASS1, ECLASS2, ECLASS3, ECLASS4, ECLASS5, }; eObjects = new EObject [eClasses.length]; for (int i = 0; i < eClasses.length; i++) { EClass eClass = eClasses[i]; eObjects[i] = eClass.getEPackage().getEFactoryInstance().create(eClass); } } } @Override public void tearDown() throws Exception { // Do nothing. } public void testSwitch1() { String[] expectedPrefixes = { "TestSwitch1.caseEClass0", "TestSwitch1.caseEClass1", "TestSwitch1.caseEClass1", "TestSwitch1.caseEClass1", "TestSwitch1.caseEClass1", "TestSwitch1.caseEClass1", }; doSwitches(switch1, "switch1", expectedPrefixes); } public void testSwitch12() { ComposedSwitch<String> switch12 = new ComposedSwitch<String>() { @Override public String defaultCase(EObject object) { return retval("ComposedSwitch12.defaultCase", object); } }; switch12.addSwitch(switch1); switch12.addSwitch(switch2); String[] expectedPrefixes = { "TestSwitch1.caseEClass0", "TestSwitch1.caseEClass1", "TestSwitch2.caseEClass2", "TestSwitch2.caseEClass3", "TestSwitch2.caseEClass3", "TestSwitch2.caseEClass3", }; doSwitches(switch12, "switch12", expectedPrefixes); } public void testSwitch123() { ComposedSwitch<String> switch123 = new ComposedSwitch<String>() { @Override public String defaultCase(EObject object) { return retval("ComposedSwitch123.defaultCase", object); } }; switch123.addSwitch(switch1); switch123.addSwitch(switch2); switch123.addSwitch(switch3); String[] expectedPrefixes = { "TestSwitch1.caseEClass0", "TestSwitch1.caseEClass1", "TestSwitch2.caseEClass2", "TestSwitch2.caseEClass3", "TestSwitch3.caseEClass4", "TestSwitch3.caseEClass5", }; doSwitches(switch123, "switch123", expectedPrefixes); } public void testSwitch13() { ComposedSwitch<String> switch13 = new ComposedSwitch<String>() { @Override public String defaultCase(EObject object) { return retval("ComposedSwitch13.defaultCase", object); } }; switch13.addSwitch(switch1); switch13.addSwitch(switch3); String[] expectedPrefixes = { "TestSwitch1.caseEClass0", "TestSwitch1.caseEClass1", "TestSwitch1.caseEClass1", "TestSwitch1.caseEClass1", "TestSwitch3.caseEClass4", "TestSwitch3.caseEClass5", }; doSwitches(switch13, "switch13", expectedPrefixes); } public void testSwitch2() { String[] expectedPrefixes = { "TestSwitch2.defaultCase", "TestSwitch2.defaultCase", "TestSwitch2.caseEClass2", "TestSwitch2.caseEClass3", "TestSwitch2.caseEClass3", "TestSwitch2.caseEClass3", }; doSwitches(switch2, "switch2", expectedPrefixes); } public void testSwitch23() { ComposedSwitch<String> switch23 = new ComposedSwitch<String>() { @Override public String defaultCase(EObject object) { return retval("ComposedSwitch23.defaultCase", object); } }; switch23.addSwitch(switch2); switch23.addSwitch(switch3); String[] expectedPrefixes = { "ComposedSwitch23.defaultCase", "ComposedSwitch23.defaultCase", "TestSwitch2.caseEClass2", "TestSwitch2.caseEClass3", "TestSwitch3.caseEClass4", "TestSwitch3.caseEClass5", }; doSwitches(switch23, "switch23", expectedPrefixes); } public void testSwitch3() { String[] expectedPrefixes = { "TestSwitch3.defaultCase", "TestSwitch3.defaultCase", "TestSwitch3.defaultCase", "TestSwitch3.defaultCase", "TestSwitch3.caseEClass4", "TestSwitch3.caseEClass5", }; doSwitches(switch3, "switch3", expectedPrefixes); } }