/** * Copyright (c) 2006-2007 IBM Corporation 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: * IBM - Initial API and implementation */ package org.eclipse.emf.test.tools.merger.facade; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.emf.codegen.ecore.genmodel.impl.GenModelImpl; import org.eclipse.emf.codegen.merge.java.JMerger; import org.eclipse.emf.codegen.merge.java.facade.FacadeFlags; import org.eclipse.emf.codegen.merge.java.facade.FacadeHelper; import org.eclipse.emf.codegen.merge.java.facade.FacadeVisitor; import org.eclipse.emf.codegen.merge.java.facade.JCompilationUnit; import org.eclipse.emf.codegen.merge.java.facade.JNode; import org.eclipse.emf.codegen.merge.java.facade.ast.ASTFacadeHelper; import org.eclipse.emf.codegen.merge.java.facade.jdom.JDOMFacadeHelper; import org.eclipse.emf.test.common.TestUtil; import org.eclipse.emf.test.tools.AllSuites; import org.eclipse.jdt.core.Flags; import org.junit.Test; /** * @since 2.2.0 */ public class FacadeAPITest { /* * Ensures that the JDT and Facade flags have the same value */ @Test public void testFacadeFlags() { assertEquals(Flags.AccAbstract, FacadeFlags.ABSTRACT); assertEquals(Flags.AccAnnotation, FacadeFlags.ANNOTATION); assertEquals(Flags.AccBridge, FacadeFlags.BRIDGE); assertEquals(Flags.AccDefault, FacadeFlags.DEFAULT); assertEquals(Flags.AccDeprecated, FacadeFlags.DEPRECATED); assertEquals(Flags.AccEnum, FacadeFlags.ENUM); assertEquals(Flags.AccFinal, FacadeFlags.FINAL); assertEquals(Flags.AccInterface, FacadeFlags.INTERFACE); assertEquals(Flags.AccNative, FacadeFlags.NATIVE); assertEquals(Flags.AccPrivate, FacadeFlags.PRIVATE); assertEquals(Flags.AccProtected, FacadeFlags.PROTECTED); assertEquals(Flags.AccPublic, FacadeFlags.PUBLIC); assertEquals(Flags.AccStatic, FacadeFlags.STATIC); assertEquals(Flags.AccStrictfp, FacadeFlags.STRICTFP); assertEquals(Flags.AccSuper, FacadeFlags.SUPER); assertEquals(Flags.AccSynchronized, FacadeFlags.SYNCHRONIZED); assertEquals(Flags.AccSynthetic, FacadeFlags.SYNTHETIC); assertEquals(Flags.AccTransient, FacadeFlags.TRANSIENT); assertEquals(Flags.AccVarargs, FacadeFlags.VARARGS); assertEquals(Flags.AccVolatile, FacadeFlags.VOLATILE); } private static class MyGenModel extends GenModelImpl { public static final String PUBLIC_FACADE_HELPER = FACADE_HELPER_CLASS_EDEFAULT; } /* * Ensures that the GenModel's and JMerger facade helper are the same */ @Test public void testGenModelDefaultFacadeClass() { assertEquals(JMerger.DEFAULT_FACADE_HELPER_CLASS, MyGenModel.PUBLIC_FACADE_HELPER); } { boolean debug = new ASTFacadeHelper() { public boolean getDebugFlag() { return DEBUG; } }.getDebugFlag(); assertFalse(debug); } /* * Bugzilla 169251 */ @Test public void testFacadeHelperReset() { File javaFile = new File(TestUtil.getPluginDirectory(AllSuites.PLUGIN_ID) + "/data/Example1.java").getAbsoluteFile(); assertTrue(javaFile.isFile()); String contents = TestUtil.readFile(javaFile, true); facadeHelperResetTest(new JDOMFacadeHelper(), contents); facadeHelperResetTest(new ASTFacadeHelper(), contents); } protected void facadeHelperResetTest(final FacadeHelper facadeHelper, String contents) { final List<Boolean> bool = new ArrayList<Boolean>(); bool.add(false); FacadeVisitor facadeVisitor = new FacadeVisitor() { @Override protected boolean basicVisit(JNode node) { String message = "bool:" + bool.get(0) + " node:" + node.getClass().getName() + " disposed: " + facadeHelper.isDisposed(node); assertTrue(message, bool.get(0) == facadeHelper.isDisposed(node)); return true; } }; JCompilationUnit compilationUnit = facadeHelper.createCompilationUnit("", contents); assertFalse(compilationUnit.getChildren().isEmpty()); facadeVisitor.start(compilationUnit); Map<Object, JNode> objectToNodeMap = getObjectToNodeMap(facadeHelper); assertNotNull(objectToNodeMap); assertFalse(objectToNodeMap.isEmpty()); for (JNode node : objectToNodeMap.values()) { assertFalse(facadeHelper.isDisposed(node)); } Map<Object, JNode> copy = new HashMap<Object, JNode>(objectToNodeMap); facadeHelper.reset(); assertTrue(objectToNodeMap.isEmpty()); bool.set(0, true); facadeVisitor.start(compilationUnit); assertFalse(copy.isEmpty()); for (JNode node : copy.values()) { assertTrue(facadeHelper.isDisposed(node)); } } protected Map<Object, JNode> getObjectToNodeMap(FacadeHelper facadeHelper) { try { Field mapField = FacadeHelper.class.getDeclaredField("objectToNodeMap"); mapField.setAccessible(true); @SuppressWarnings("unchecked") Map<Object, JNode> map = (Map<Object, JNode>)mapField.get(facadeHelper); return map; } catch (Exception e) { e.printStackTrace(); } return null; } }