Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

AsmDeclarationsTests.java 9.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /* *******************************************************************
  2. * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://www.eclipse.org/legal/epl-v10.html
  8. *
  9. * ******************************************************************/
  10. package org.aspectj.ajde.core.tests.model;
  11. import java.io.File;
  12. import org.aspectj.ajde.core.AjdeCoreTestCase;
  13. import org.aspectj.ajde.core.TestCompilerConfiguration;
  14. import org.aspectj.asm.AsmManager;
  15. import org.aspectj.asm.IHierarchy;
  16. import org.aspectj.asm.IProgramElement;
  17. public class AsmDeclarationsTests extends AjdeCoreTestCase {
  18. private IHierarchy model = null;
  19. private String[] files = new String[]{
  20. "ModelCoverage.java",
  21. "pkg" + File.separator + "InPackage.java"
  22. };
  23. private TestCompilerConfiguration compilerConfig;
  24. protected void setUp() throws Exception {
  25. super.setUp();
  26. initialiseProject("coverage");
  27. compilerConfig = (TestCompilerConfiguration) getCompiler()
  28. .getCompilerConfiguration();
  29. compilerConfig.setProjectSourceFiles(getSourceFileList(files));
  30. doBuild();
  31. model = AsmManager.getDefault().getHierarchy();
  32. }
  33. protected void tearDown() throws Exception {
  34. super.tearDown();
  35. compilerConfig = null;
  36. model = null;
  37. }
  38. public void testRoot() {
  39. IProgramElement root = model.getRoot();
  40. assertNotNull(root);
  41. assertEquals("Expected root to be named 'coverage' but found "
  42. + root.toLabelString(), root.toLabelString(), "coverage");
  43. }
  44. public void testAspectAccessibility() {
  45. IProgramElement packageAspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "AdviceNamingCoverage");
  46. assertNotNull(packageAspect);
  47. assertEquals(IProgramElement.Accessibility.PACKAGE, packageAspect.getAccessibility());
  48. assertEquals("aspect should not have public in it's signature","aspect AdviceNamingCoverage",packageAspect.getSourceSignature());
  49. }
  50. public void testStaticModifiers() {
  51. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "ModifiersCoverage");
  52. assertNotNull(aspect);
  53. IProgramElement staticA = model.findElementForSignature(aspect, IProgramElement.Kind.FIELD, "staticA");
  54. assertTrue(staticA.getModifiers().contains(IProgramElement.Modifiers.STATIC));
  55. IProgramElement finalA = model.findElementForSignature(aspect, IProgramElement.Kind.FIELD, "finalA");
  56. assertTrue(!finalA.getModifiers().contains(IProgramElement.Modifiers.STATIC));
  57. assertTrue(finalA.getModifiers().contains(IProgramElement.Modifiers.FINAL));
  58. }
  59. public void testFileInPackageAndDefaultPackage() {
  60. IProgramElement root = model.getRoot();
  61. assertEquals(root.toLabelString(), "coverage");
  62. IProgramElement pkg = (IProgramElement)root.getChildren().get(1);
  63. assertEquals(pkg.toLabelString(), "pkg");
  64. assertEquals(((IProgramElement)pkg.getChildren().get(0)).toLabelString(), "InPackage.java");
  65. assertEquals(((IProgramElement)root.getChildren().get(0)).toLabelString(), "ModelCoverage.java");
  66. }
  67. public void testDeclares() {
  68. IProgramElement node = model.getRoot();
  69. assertNotNull(node);
  70. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "DeclareCoverage");
  71. assertNotNull(aspect);
  72. String label = "declare error: \"Illegal construct..\"";
  73. IProgramElement decErrNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_ERROR, "declare error");
  74. assertNotNull(decErrNode);
  75. assertEquals(decErrNode.toLabelString(), label);
  76. String decWarnMessage = "declare warning: \"Illegal call.\"";
  77. IProgramElement decWarnNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_WARNING, "declare warning");
  78. assertNotNull(decWarnNode);
  79. assertEquals(decWarnNode.toLabelString(), decWarnMessage);
  80. String decParentsMessage = "declare parents: implements Serializable";
  81. IProgramElement decParentsNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_PARENTS, "declare parents");
  82. assertNotNull(decParentsNode);
  83. assertEquals(decParentsNode.toLabelString(), decParentsMessage);
  84. // check the next two relative to this one
  85. int declareIndex = decParentsNode.getParent().getChildren().indexOf(decParentsNode);
  86. String decParentsPtnMessage = "declare parents: extends Observable";
  87. assertEquals(decParentsPtnMessage,((IProgramElement)aspect.getChildren().get(declareIndex+1)).toLabelString());
  88. String decParentsTPMessage = "declare parents: extends Observable";
  89. assertEquals(decParentsTPMessage,((IProgramElement)aspect.getChildren().get(declareIndex+2)).toLabelString());
  90. String decSoftMessage = "declare soft: SizeException";
  91. IProgramElement decSoftNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_SOFT, "declare soft");
  92. assertNotNull(decSoftNode);
  93. assertEquals(decSoftNode.toLabelString(), decSoftMessage);
  94. String decPrecMessage = "declare precedence: AdviceCoverage, InterTypeDecCoverage, <type pattern>";
  95. IProgramElement decPrecNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_PRECEDENCE, "declare precedence");
  96. assertNotNull(decPrecNode);
  97. assertEquals(decPrecNode.toLabelString(), decPrecMessage);
  98. }
  99. public void testInterTypeMemberDeclares() {
  100. IProgramElement node = model.getRoot();
  101. assertNotNull(node);
  102. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "InterTypeDecCoverage");
  103. assertNotNull(aspect);
  104. String fieldMsg = "Point.xxx";
  105. IProgramElement fieldNode = model.findElementForLabel(aspect, IProgramElement.Kind.INTER_TYPE_FIELD, fieldMsg);
  106. assertNotNull(fieldNode);
  107. assertEquals(fieldNode.toLabelString(), fieldMsg);
  108. String methodMsg = "Point.check(int,Line)";
  109. IProgramElement methodNode = model.findElementForLabel(aspect, IProgramElement.Kind.INTER_TYPE_METHOD, methodMsg);
  110. assertNotNull(methodNode);
  111. assertEquals(methodNode.toLabelString(), methodMsg);
  112. // TODO: enable
  113. // String constructorMsg = "Point.new(int, int, int)";
  114. // ProgramElementNode constructorNode = model.findNode(aspect, ProgramElementNode.Kind.INTER_TYPE_CONSTRUCTOR, constructorMsg);
  115. // assertNotNull(constructorNode);
  116. // assertEquals(constructorNode.toLabelString(), constructorMsg);
  117. }
  118. public void testPointcuts() {
  119. IProgramElement node = model.getRoot();
  120. assertNotNull(node);
  121. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "AdviceNamingCoverage");
  122. assertNotNull(aspect);
  123. String ptct = "named()";
  124. IProgramElement ptctNode = model.findElementForSignature(aspect, IProgramElement.Kind.POINTCUT, ptct);
  125. assertNotNull(ptctNode);
  126. assertEquals(ptctNode.toLabelString(), ptct);
  127. String params = "namedWithArgs(int,int)";
  128. IProgramElement paramsNode = model.findElementForSignature(aspect, IProgramElement.Kind.POINTCUT, params);
  129. assertNotNull(paramsNode);
  130. assertEquals(paramsNode.toLabelString(), params);
  131. }
  132. public void testAbstract() {
  133. IProgramElement node = model.getRoot();
  134. assertNotNull(node);
  135. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "AbstractAspect");
  136. assertNotNull(aspect);
  137. String abst = "abPtct()";
  138. IProgramElement abstNode = model.findElementForSignature(aspect, IProgramElement.Kind.POINTCUT, abst);
  139. assertNotNull(abstNode);
  140. assertEquals(abstNode.toLabelString(), abst);
  141. }
  142. public void testAdvice() {
  143. IProgramElement node = model.getRoot();
  144. assertNotNull(node);
  145. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "AdviceNamingCoverage");
  146. assertNotNull(aspect);
  147. String anon = "before(): <anonymous pointcut>";
  148. IProgramElement anonNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, anon);
  149. assertNotNull(anonNode);
  150. assertEquals(anonNode.toLabelString(), anon);
  151. String named = "before(): named..";
  152. IProgramElement namedNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, named);
  153. assertNotNull(namedNode);
  154. assertEquals(namedNode.toLabelString(), named);
  155. String namedWithOneArg = "around(int): namedWithOneArg..";
  156. IProgramElement namedWithOneArgNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, namedWithOneArg);
  157. assertNotNull(namedWithOneArgNode);
  158. assertEquals(namedWithOneArgNode.toLabelString(), namedWithOneArg);
  159. String afterReturning = "afterReturning(int,int): namedWithArgs..";
  160. IProgramElement afterReturningNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, afterReturning);
  161. assertNotNull(afterReturningNode);
  162. assertEquals(afterReturningNode.toLabelString(), afterReturning);
  163. String around = "around(int): namedWithOneArg..";
  164. IProgramElement aroundNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, around);
  165. assertNotNull(aroundNode);
  166. assertEquals(aroundNode.toLabelString(), around);
  167. String compAnon = "before(int): <anonymous pointcut>..";
  168. IProgramElement compAnonNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, compAnon);
  169. assertNotNull(compAnonNode);
  170. assertEquals(compAnonNode.toLabelString(), compAnon);
  171. String compNamed = "before(int): named()..";
  172. IProgramElement compNamedNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, compNamed);
  173. assertNotNull(compNamedNode);
  174. assertEquals(compNamedNode.toLabelString(), compNamed);
  175. }
  176. }