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.

VarargsTests.java 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*******************************************************************************
  2. * Copyright (c) 2004 IBM
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Common Public License v1.0
  5. * which accompanies this distribution, and is available at
  6. * http://www.eclipse.org/legal/cpl-v10.html
  7. *
  8. * Contributors:
  9. * Andy Clement - initial API and implementation
  10. *******************************************************************************/
  11. package org.aspectj.systemtest.ajc150;
  12. import java.io.File;
  13. import org.aspectj.bridge.IMessage;
  14. import org.aspectj.tools.ajc.CompilationResult;
  15. /**
  16. * Varargs, the rules/tests:
  17. *
  18. * 1. cannot match on a varargs method by using 'Object[]' in your signature,
  19. * this affects call/execution/initialization/withincode
  20. */
  21. public class VarargsTests extends TestUtils {
  22. protected void setUp() throws Exception {
  23. super.setUp();
  24. baseDir = new File("../tests/java5/varargs");
  25. }
  26. // check when signature is from a call PCD
  27. // should get message:
  28. // "an array type as the last parameter in a signature does not match on the varargs declared method: <blah>"
  29. public void test001_cantMatchVarargsWithObjectArray_callPCD() {
  30. CompilationResult cR = binaryWeave("testcode.jar","VarargsAspect01.aj",0,3,true);
  31. assertTrue("Did not get expected message about a varargs mismatch, instead got: "+cR.getWarningMessages(),
  32. ((IMessage)cR.getWarningMessages().get(0)).toString().indexOf("varargs declared method")!=-1);
  33. verifyWeavingMessagesOutput(cR,new String[]{});
  34. }
  35. // check when signature is from an execution PCD
  36. public void test002_cantMatchVarargsWithObjectArray_execPCD() {
  37. CompilationResult cR = binaryWeave("testcode.jar","VarargsAspect02.aj",0,1,true);
  38. assertTrue("Did not get expected message about a varargs mismatch, instead got: "+cR.getWarningMessages(),
  39. ((IMessage)cR.getWarningMessages().get(0)).toString().indexOf("varargs declared method")!=-1);
  40. verifyWeavingMessagesOutput(cR,new String[]{});
  41. }
  42. // check when signature is from an initialization PCD
  43. public void test003_cantMatchVarargsWithObjectArray_initPCD() {
  44. CompilationResult cR = binaryWeave("testcode.jar","VarargsAspect03.aj",0,1,true);
  45. assertTrue("Did not get expected message about a varags mismatch, instead got: "+cR.getWarningMessages(),
  46. ((IMessage)cR.getWarningMessages().get(0)).toString().indexOf("varargs declared method")!=-1);
  47. verifyWeavingMessagesOutput(cR,new String[]{});
  48. }
  49. // check when signature is from an withincode PCD
  50. // In this test, it can be tricky to understand the results!! The reason being that the shadow
  51. // isn't included in the error message (it really should be, but thats a bit hard to do cleanly)
  52. public void test003_cantMatchVarargsWithObjectArray_withincodePCD() {
  53. CompilationResult cR = binaryWeave("testcode.jar","VarargsAspect04.aj",0,6,true);
  54. // There are 7. Each piece of the pointcut is matched against all the shadows, so both
  55. // the 'withincode' PCD and the 'call' PCD are matched against every join point.
  56. // AMC - there are now SIX. We detect early that a call(* *(..)) pcd cannot match
  57. // constructor call shadows and never do the match.
  58. assertTrue("Did not get expected message about a varargs mismatch, instead got: "+cR.getWarningMessages(),
  59. ((IMessage)cR.getWarningMessages().get(0)).toString().indexOf("varargs declared method")!=-1);
  60. verifyWeavingMessagesOutput(cR,new String[]{});
  61. }
  62. // before(): call(* *(Integer...)) { }
  63. public void test_usingVarargsInPointcuts1() {
  64. CompilationResult cR = binaryWeave("testcode.jar","VarargsAspect05.aj",0,0,true);
  65. System.err.println(cR.getStandardError());
  66. System.err.println(cR.getErrorMessages());
  67. System.err.println(cR.getInfoMessages());
  68. verifyWeavingMessagesOutput(cR,new String[]{
  69. "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:15) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)",
  70. "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:16) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)",
  71. "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:17) advised by before advice from 'VarargsAspect05' (VarargsAspect05.aj:3)"});
  72. }
  73. // before(): call(* *(int,Integer...)) { } - slightly more complex pcut
  74. public void test_usingVarargsInPointcuts2() {
  75. CompilationResult cR = binaryWeave("testcode.jar","VarargsAspect06.aj",0,0,true);
  76. System.err.println(cR.getStandardError());
  77. System.err.println(cR.getErrorMessages());
  78. System.err.println(cR.getInfoMessages());
  79. verifyWeavingMessagesOutput(cR,new String[]{
  80. "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:20) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)",
  81. "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:21) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)",
  82. "weaveinfo Type 'SimpleVarargs' (SimpleVarargs.java:22) advised by before advice from 'VarargsAspect06' (VarargsAspect06.aj:3)"});
  83. }
  84. }