You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AsmDeclarationsTest.java 8.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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 Common Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://www.eclipse.org/legal/cpl-v10.html
  8. *
  9. * ******************************************************************/
  10. package org.aspectj.ajde;
  11. //import java.util.Iterator;
  12. //import org.aspectj.ajdt.internal.core.builder.AsmElementFormatter;
  13. import org.aspectj.asm.*;
  14. //import org.aspectj.asm.IProgramElement.Kind;
  15. // TODO: add tests for java kinds, expand coverage
  16. public class AsmDeclarationsTest extends AjdeTestCase {
  17. private IHierarchy model = null;
  18. private static final String CONFIG_FILE_PATH = "../examples/coverage/coverage.lst";
  19. // private static final int DEC_MESSAGE_LENGTH = AsmElementFormatter.MAX_MESSAGE_LENGTH;
  20. public AsmDeclarationsTest(String name) {
  21. super(name);
  22. }
  23. public void testRoot() {
  24. IProgramElement root = (IProgramElement)model.getRoot();
  25. assertNotNull(root);
  26. assertEquals(root.toLabelString(), "coverage.lst");
  27. }
  28. public void testStaticModifiers() {
  29. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "ModifiersCoverage");
  30. assertNotNull(aspect);
  31. IProgramElement staticA = model.findElementForSignature(aspect, IProgramElement.Kind.FIELD, "staticA");
  32. assertTrue(staticA.getModifiers().contains(IProgramElement.Modifiers.STATIC));
  33. IProgramElement finalA = model.findElementForSignature(aspect, IProgramElement.Kind.FIELD, "finalA");
  34. assertTrue(!finalA.getModifiers().contains(IProgramElement.Modifiers.STATIC));
  35. assertTrue(finalA.getModifiers().contains(IProgramElement.Modifiers.FINAL));
  36. }
  37. public void testFileInPackageAndDefaultPackage() {
  38. IProgramElement root = model.getRoot();
  39. assertEquals(root.toLabelString(), "coverage.lst");
  40. IProgramElement pkg = (IProgramElement)root.getChildren().get(1);
  41. assertEquals(pkg.toLabelString(), "pkg");
  42. assertEquals(((IProgramElement)pkg.getChildren().get(0)).toLabelString(), "InPackage.java");
  43. assertEquals(((IProgramElement)root.getChildren().get(0)).toLabelString(), "ModelCoverage.java");
  44. }
  45. public void testDeclares() {
  46. IProgramElement node = (IProgramElement)model.getRoot();
  47. assertNotNull(node);
  48. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "DeclareCoverage");
  49. assertNotNull(aspect);
  50. String label = "declare error: \"Illegal construct..\"";
  51. IProgramElement decErrNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_ERROR, "declare error");
  52. assertNotNull(decErrNode);
  53. assertEquals(decErrNode.toLabelString(), label);
  54. String decWarnMessage = "declare warning: \"Illegal call.\"";
  55. IProgramElement decWarnNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_WARNING, "declare warning");
  56. assertNotNull(decWarnNode);
  57. assertEquals(decWarnNode.toLabelString(), decWarnMessage);
  58. String decParentsMessage = "declare parents: implements Serializable";
  59. IProgramElement decParentsNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_PARENTS, "declare parents");
  60. assertNotNull(decParentsNode);
  61. assertEquals(decParentsNode.toLabelString(), decParentsMessage);
  62. // check the next two relative to this one
  63. int declareIndex = decParentsNode.getParent().getChildren().indexOf(decParentsNode);
  64. String decParentsPtnMessage = "declare parents: extends Observable";
  65. assertEquals(decParentsPtnMessage,((IProgramElement)aspect.getChildren().get(declareIndex+1)).toLabelString());
  66. String decParentsTPMessage = "declare parents: extends Observable";
  67. assertEquals(decParentsTPMessage,((IProgramElement)aspect.getChildren().get(declareIndex+2)).toLabelString());
  68. String decSoftMessage = "declare soft: SizeException";
  69. IProgramElement decSoftNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_SOFT, "declare soft");
  70. assertNotNull(decSoftNode);
  71. assertEquals(decSoftNode.toLabelString(), decSoftMessage);
  72. String decPrecMessage = "declare precedence: AdviceCoverage, InterTypeDecCoverage, <type pattern>";
  73. IProgramElement decPrecNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_PRECEDENCE, "declare precedence");
  74. assertNotNull(decPrecNode);
  75. assertEquals(decPrecNode.toLabelString(), decPrecMessage);
  76. }
  77. public void testInterTypeMemberDeclares() {
  78. IProgramElement node = (IProgramElement)model.getRoot();
  79. assertNotNull(node);
  80. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "InterTypeDecCoverage");
  81. assertNotNull(aspect);
  82. String fieldMsg = "Point.xxx";
  83. IProgramElement fieldNode = model.findElementForLabel(aspect, IProgramElement.Kind.INTER_TYPE_FIELD, fieldMsg);
  84. assertNotNull(fieldNode);
  85. assertEquals(fieldNode.toLabelString(), fieldMsg);
  86. String methodMsg = "Point.check(int, Line)";
  87. IProgramElement methodNode = model.findElementForLabel(aspect, IProgramElement.Kind.INTER_TYPE_METHOD, methodMsg);
  88. assertNotNull(methodNode);
  89. assertEquals(methodNode.toLabelString(), methodMsg);
  90. // TODO: enable
  91. // String constructorMsg = "Point.new(int, int, int)";
  92. // ProgramElementNode constructorNode = model.findNode(aspect, ProgramElementNode.Kind.INTER_TYPE_CONSTRUCTOR, constructorMsg);
  93. // assertNotNull(constructorNode);
  94. // assertEquals(constructorNode.toLabelString(), constructorMsg);
  95. }
  96. public void testPointcuts() {
  97. IProgramElement node = (IProgramElement)model.getRoot();
  98. assertNotNull(node);
  99. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "AdviceNamingCoverage");
  100. assertNotNull(aspect);
  101. String ptct = "named()";
  102. IProgramElement ptctNode = model.findElementForSignature(aspect, IProgramElement.Kind.POINTCUT, ptct);
  103. assertNotNull(ptctNode);
  104. assertEquals(ptctNode.toLabelString(), ptct);
  105. String params = "namedWithArgs(int, int)";
  106. IProgramElement paramsNode = model.findElementForSignature(aspect, IProgramElement.Kind.POINTCUT, params);
  107. assertNotNull(paramsNode);
  108. assertEquals(paramsNode.toLabelString(), params);
  109. }
  110. public void testAbstract() {
  111. IProgramElement node = (IProgramElement)model.getRoot();
  112. assertNotNull(node);
  113. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "AbstractAspect");
  114. assertNotNull(aspect);
  115. String abst = "abPtct()";
  116. IProgramElement abstNode = model.findElementForSignature(aspect, IProgramElement.Kind.POINTCUT, abst);
  117. assertNotNull(abstNode);
  118. assertEquals(abstNode.toLabelString(), abst);
  119. }
  120. public void testAdvice() {
  121. IProgramElement node = (IProgramElement)model.getRoot();
  122. assertNotNull(node);
  123. IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, "AdviceNamingCoverage");
  124. assertNotNull(aspect);
  125. String anon = "before(): <anonymous pointcut>";
  126. IProgramElement anonNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, anon);
  127. assertNotNull(anonNode);
  128. assertEquals(anonNode.toLabelString(), anon);
  129. String named = "before(): named..";
  130. IProgramElement namedNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, named);
  131. assertNotNull(namedNode);
  132. assertEquals(namedNode.toLabelString(), named);
  133. String namedWithOneArg = "around(int): namedWithOneArg..";
  134. IProgramElement namedWithOneArgNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, namedWithOneArg);
  135. assertNotNull(namedWithOneArgNode);
  136. assertEquals(namedWithOneArgNode.toLabelString(), namedWithOneArg);
  137. String afterReturning = "afterReturning(int, int): namedWithArgs..";
  138. IProgramElement afterReturningNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, afterReturning);
  139. assertNotNull(afterReturningNode);
  140. assertEquals(afterReturningNode.toLabelString(), afterReturning);
  141. String around = "around(int): namedWithOneArg..";
  142. IProgramElement aroundNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, around);
  143. assertNotNull(aroundNode);
  144. assertEquals(aroundNode.toLabelString(), around);
  145. String compAnon = "before(int): <anonymous pointcut>..";
  146. IProgramElement compAnonNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, compAnon);
  147. assertNotNull(compAnonNode);
  148. assertEquals(compAnonNode.toLabelString(), compAnon);
  149. String compNamed = "before(int): named()..";
  150. IProgramElement compNamedNode = model.findElementForLabel(aspect, IProgramElement.Kind.ADVICE, compNamed);
  151. assertNotNull(compNamedNode);
  152. assertEquals(compNamedNode.toLabelString(), compNamed);
  153. }
  154. protected void setUp() throws Exception {
  155. super.setUp("examples");
  156. assertTrue("build success", doSynchronousBuild(CONFIG_FILE_PATH));
  157. model = AsmManager.getDefault().getHierarchy();
  158. }
  159. protected void tearDown() throws Exception {
  160. super.tearDown();
  161. }
  162. }