package spoon.test.staticFieldAccess2; import static spoon.testing.utils.ModelUtils.canBeBuilt; import static org.junit.Assert.*; import org.junit.Test; import spoon.Launcher; import spoon.reflect.declaration.CtClass; public class ImplicitStaticFieldReferenceTest { private static final boolean expectImplicit = false; @Test public void testImplicitStaticFieldReference() throws Exception { Launcher launcher = checkFile(false, "ImplicitStaticFieldReference.java"); if(expectImplicit) { CtClass<?> cls = launcher.getFactory().Class().get(ImplicitStaticFieldReference.class); assertEquals("return ImplicitStaticFieldReference", cls.getMethod("reader").getBody().getStatements().get(0).toString()); assertEquals("ImplicitStaticFieldReference = value", cls.getMethodsByName("writer").get(0).getBody().getStatements().get(0).toString()); assertEquals("reader()", cls.getMethodsByName("testLocalMethodInvocations").get(0).getBody().getStatements().get(0).toString()); assertEquals("longWriter(7)", cls.getMethodsByName("testLocalMethodInvocations").get(0).getBody().getStatements().get(1).toString()); } } @Test public void testImplicitStaticFieldReferenceAutoImport() throws Exception { Launcher launcher = checkFile(true, "ImplicitStaticFieldReference.java"); if(expectImplicit) { CtClass<?> cls = launcher.getFactory().Class().get(ImplicitStaticFieldReference.class); assertEquals("return ImplicitStaticFieldReference", cls.getMethod("reader").getBody().getStatements().get(0).toString()); assertEquals("ImplicitStaticFieldReference = value", cls.getMethodsByName("writer").get(0).getBody().getStatements().get(0).toString()); assertEquals("reader()", cls.getMethodsByName("testLocalMethodInvocations").get(0).getBody().getStatements().get(0).toString()); assertEquals("longWriter(7)", cls.getMethodsByName("testLocalMethodInvocations").get(0).getBody().getStatements().get(1).toString()); } } @Test public void testImplicitFieldReference() throws Exception { Launcher launcher = checkFile(false, "ImplicitFieldReference.java"); if(expectImplicit) { CtClass<?> cls = launcher.getFactory().Class().get(ImplicitFieldReference.class); assertEquals("return memberField", cls.getMethod("getMemberField").getBody().getStatements().get(0).toString()); assertEquals("memberField = p_memberField", cls.getMethodsByName("setMemberField").get(0).getBody().getStatements().get(0).toString()); // assertEquals("this.memberField = memberField", cls.getMethodsByName("setMemberField2").get(0).getBody().getStatements().get(0).toString()); assertEquals("getMemberField()", cls.getMethodsByName("testLocalMethodInvocations").get(0).getBody().getStatements().get(0).toString()); } } @Test public void testImplicitFieldReferenceAutoImport() throws Exception { Launcher launcher = checkFile(true, "ImplicitFieldReference.java"); if(expectImplicit) { CtClass<?> cls = launcher.getFactory().Class().get(ImplicitFieldReference.class); assertEquals("return memberField", cls.getMethod("getMemberField").getBody().getStatements().get(0).toString()); assertEquals("memberField = p_memberField", cls.getMethodsByName("setMemberField").get(0).getBody().getStatements().get(0).toString()); // assertEquals("this.memberField = memberField", cls.getMethodsByName("setMemberField2").get(0).getBody().getStatements().get(0).toString()); assertEquals("getMemberField()", cls.getMethodsByName("testLocalMethodInvocations").get(0).getBody().getStatements().get(0).toString()); } } @Test public void testAmbiguousImplicitFieldReference() throws Exception { Launcher launcher = checkFile(false, "AmbiguousImplicitFieldReference.java"); if(expectImplicit) { CtClass<?> cls = launcher.getFactory().Class().get(AmbiguousImplicitFieldReference.class); assertEquals("return memberField", cls.getMethod("getMemberField").getBody().getStatements().get(0).toString()); assertEquals("memberField = p_memberField", cls.getMethodsByName("setMemberField").get(0).getBody().getStatements().get(0).toString()); // assertEquals("this.memberField = memberField", cls.getMethodsByName("setMemberField2").get(0).getBody().getStatements().get(0).toString()); assertEquals("getMemberField()", cls.getMethodsByName("testLocalMethodInvocations").get(0).getBody().getStatements().get(0).toString()); } } @Test public void testAmbiguousImplicitFieldReferenceAutoImport() throws Exception { Launcher launcher = checkFile(true, "AmbiguousImplicitFieldReference.java"); if(expectImplicit) { CtClass<?> cls = launcher.getFactory().Class().get(AmbiguousImplicitFieldReference.class); assertEquals("return memberField", cls.getMethod("getMemberField").getBody().getStatements().get(0).toString()); assertEquals("memberField = p_memberField", cls.getMethodsByName("setMemberField").get(0).getBody().getStatements().get(0).toString()); // assertEquals("this.memberField = memberField", cls.getMethodsByName("setMemberField2").get(0).getBody().getStatements().get(0).toString()); assertEquals("getMemberField()", cls.getMethodsByName("testLocalMethodInvocations").get(0).getBody().getStatements().get(0).toString()); } } @Test public void testImplicitStaticClassAccess() throws Exception { Launcher launcher = checkFile(false, "ImplicitStaticClassAccess.java"); } @Test public void testImplicitStaticClassAccessAutoImport() throws Exception { Launcher launcher = checkFile(true, "ImplicitStaticClassAccess.java"); } @Test public void testGenericsWithAmbiguousStaticField() throws Exception { Launcher launcher = checkFile(false, "GenericsWithAmbiguousStaticField.java"); } @Test public void testGenericsWithAmbiguousStaticFieldAutoImport() throws Exception { Launcher launcher = checkFile(true, "GenericsWithAmbiguousStaticField.java"); } @Test public void testChildOfGenericsWithAmbiguousStaticField() throws Exception { Launcher launcher = checkFile(false, "ChildOfGenericsWithAmbiguousStaticField.java"); } @Test public void testChildOfGenericsWithAmbiguousStaticFieldAutoImport() throws Exception { Launcher launcher = checkFile(true, "ChildOfGenericsWithAmbiguousStaticField.java"); if(expectImplicit) { CtClass<?> cls = launcher.getFactory().Class().get(ChildOfGenericsWithAmbiguousStaticField.class); //The toString of the method does not have a context of class, so it different result // assertEquals("spoon.test.staticFieldAccess2.GenericsWithAmbiguousStaticField.<V, C>genericMethod()", cls.getMethod("m1").getBody().getStatements().get(0).toString()); assertTrue(cls.toString().indexOf("spoon.test.staticFieldAccess2.GenericsWithAmbiguousStaticField.<V, C>genericMethod()")>=0); assertEquals("genericMethod()", cls.getMethod("m1").getBody().getStatements().get(1).toString()); } } @Test public void testGenericsWithAmbiguousMemberField() throws Exception { Launcher launcher = checkFile(false, "GenericsWithAmbiguousMemberField.java"); } @Test public void testGenericsWithAmbiguousMemberFieldAutoImport() throws Exception { Launcher launcher = checkFile(true, "GenericsWithAmbiguousMemberField.java"); } @Test public void testAnnotationInChildWithConstants() throws Exception { Launcher launcher = checkFile(false, "ChildOfConstants.java", "Constants.java"); } @Test public void testAnnotationInChildWithConstantsAutoImport() throws Exception { Launcher launcher = checkFile(true, "ChildOfConstants.java", "Constants.java"); } private static Launcher checkFile(boolean autoImports, String... fileName) { Launcher launcher = new Launcher(); launcher.getEnvironment().setAutoImports(autoImports); String pckg = "spoon/test/staticFieldAccess2/"; for (String fn : fileName) { launcher.addInputResource("src/test/java/"+pckg+fn); } String targetDir = "./target/spooned"+(autoImports?"-autoImports":""); launcher.setSourceOutputDirectory(targetDir); launcher.buildModel(); launcher.prettyprint(); for (String fn : fileName) { canBeBuilt(targetDir+"/"+pckg+fn, 8); } return launcher; } }