1 22 package org.jboss.test.aop.dynamicgenadvisor; 23 24 import junit.framework.Test; 25 import junit.framework.TestSuite; 26 import junit.textui.TestRunner; 27 28 29 import org.jboss.aop.Advised; 30 import org.jboss.aop.AspectManager; 31 import org.jboss.aop.Domain; 32 import org.jboss.aop.InstanceAdvisor; 33 import org.jboss.aop.advice.AdviceBinding; 34 import org.jboss.aop.advice.AdviceFactory; 35 import org.jboss.aop.advice.AspectDefinition; 36 import org.jboss.aop.introduction.AnnotationIntroduction; 37 import org.jboss.aop.metadata.DynamicSimpleClassMetadataLoader; 38 import org.jboss.test.aop.AOPTestWithSetup; 39 40 46 public class DynamicTester extends AOPTestWithSetup 47 { 48 public static Test suite() 49 { 50 TestSuite suite = new TestSuite("DynamicTester"); 51 suite.addTestSuite(DynamicTester.class); 52 return suite; 53 } 54 57 59 public DynamicTester(String name) 61 { 62 super(name); 63 } 64 65 public void testNotAdvised() throws Exception 66 { 67 System.out.println("TEST NOT ADVISED"); 68 Interceptions.clear(); 69 POJO pojo = new POJO(); 70 pojo.i = 10; 71 pojo.j = 20; 72 pojo.someMethod(123); 73 pojo.notPrepared(); 74 assertTrue(Interceptions.isEmpty()); 75 } 76 77 public void testConstructor() throws Exception 78 { 79 System.out.println("TEST CONSTRUCTOR"); 80 Interceptions.clear(); 81 AdviceBinding binding = new AdviceBinding("execution(org.jboss.test.aop.dynamicgenadvisor.POJO->new())", null); 82 String name = binding.getName(); 83 binding.addInterceptor(MyInterceptor.class); 84 AspectManager.instance().addBinding(binding); 85 86 POJO pojo = new POJO(); 87 assertEquals(1, Interceptions.size()); 88 assertEquals(Interceptions.getConstructorName("MyInterceptor", "POJO"), Interceptions.get(0)); 89 90 AdviceBinding binding2 = new AdviceBinding("execution(org.jboss.test.aop.dynamicgenadvisor.POJO->new())", null); 91 String name2 = binding2.getName(); 92 AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect"); 93 binding2.addInterceptorFactory(new AdviceFactory(myAspect, "intercept")); 94 binding2.addInterceptor(MyInterceptor.class); 95 AspectManager.instance().addBinding(binding2); 96 97 Interceptions.clear(); 98 pojo = new POJO(); 99 assertEquals(3, Interceptions.size()); 100 assertEquals(Interceptions.getConstructorName("MyInterceptor", "POJO"), Interceptions.get(0)); 101 assertEquals(Interceptions.getConstructorName("MyAspect", "POJO"), Interceptions.get(1)); 102 assertEquals(Interceptions.getConstructorName("MyInterceptor", "POJO"), Interceptions.get(2)); 103 104 Interceptions.clear(); 105 AspectManager.instance().removeBinding(name); 106 pojo = new POJO(); 107 assertEquals(2, Interceptions.size()); 108 assertEquals(Interceptions.getConstructorName("MyAspect", "POJO"), Interceptions.get(0)); 109 assertEquals(Interceptions.getConstructorName("MyInterceptor", "POJO"), Interceptions.get(1)); 110 111 Interceptions.clear(); 112 AspectManager.instance().removeBinding(name2); 113 pojo = new POJO(); 114 assertTrue(Interceptions.isEmpty()); 115 } 116 117 118 public void testConstruction() throws Exception 119 { 120 System.out.println("TEST CONSTRUCTION"); 121 Interceptions.clear(); 122 AdviceBinding binding = new AdviceBinding("construction(org.jboss.test.aop.dynamicgenadvisor.POJO->new())", null); 123 String name = binding.getName(); 124 binding.addInterceptor(MyInterceptor.class); 125 AspectManager.instance().addBinding(binding); 126 127 POJO pojo = new POJO(); 128 assertEquals(1, Interceptions.size()); 129 assertEquals(Interceptions.getConstructionName("MyInterceptor", "POJO"), Interceptions.get(0)); 130 131 AdviceBinding binding2 = new AdviceBinding("construction(org.jboss.test.aop.dynamicgenadvisor.POJO->new())", null); 132 String name2 = binding2.getName(); 133 AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect"); 134 binding2.addInterceptorFactory(new AdviceFactory(myAspect, "intercept")); 135 binding2.addInterceptor(MyInterceptor.class); 136 AspectManager.instance().addBinding(binding2); 137 138 Interceptions.clear(); 139 pojo = new POJO(); 140 assertEquals(3, Interceptions.size()); 141 assertEquals(Interceptions.getConstructionName("MyInterceptor", "POJO"), Interceptions.get(0)); 142 assertEquals(Interceptions.getConstructionName("MyAspect", "POJO"), Interceptions.get(1)); 143 assertEquals(Interceptions.getConstructionName("MyInterceptor", "POJO"), Interceptions.get(2)); 144 145 Interceptions.clear(); 146 AspectManager.instance().removeBinding(name); 147 pojo = new POJO(); 148 assertEquals(2, Interceptions.size()); 149 assertEquals(Interceptions.getConstructionName("MyAspect", "POJO"), Interceptions.get(0)); 150 assertEquals(Interceptions.getConstructionName("MyInterceptor", "POJO"), Interceptions.get(1)); 151 152 Interceptions.clear(); 153 AspectManager.instance().removeBinding(name2); 154 pojo = new POJO(); 155 assertTrue(Interceptions.isEmpty()); 156 } 157 158 public void testMethodExecution() throws Exception 159 { 160 System.out.println("TEST METHOD"); 161 Interceptions.clear(); 162 AdviceBinding binding = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null); 163 String name = binding.getName(); 164 binding.addInterceptor(MyInterceptor.class); 165 AspectManager.instance().addBinding(binding); 166 167 POJO pojo = new POJO(); 168 pojo.someMethod(123); 169 assertEquals(1, Interceptions.size()); 170 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 171 172 AdviceBinding binding2 = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null); 173 String name2 = binding2.getName(); 174 AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect"); 175 binding2.addInterceptorFactory(new AdviceFactory(myAspect, "intercept")); 176 binding2.addInterceptor(MyInterceptor.class); 177 AspectManager.instance().addBinding(binding2); 178 179 Interceptions.clear(); 180 pojo.someMethod(123); 181 assertEquals(3, Interceptions.size()); 182 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 183 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1)); 184 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(2)); 185 186 Interceptions.clear(); 187 AspectManager.instance().removeBinding(name); 188 pojo.someMethod(123); 189 assertEquals(2, Interceptions.size()); 190 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(0)); 191 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(1)); 192 193 Interceptions.clear(); 194 AspectManager.instance().removeBinding(name2); 195 pojo.someMethod(123); 196 assertTrue(Interceptions.isEmpty()); 197 } 198 199 public void testFields() throws Exception 200 { 201 System.out.println("TEST FIELDS"); 202 AdviceBinding binding = new AdviceBinding("set(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 203 String name = binding.getName(); 204 binding.addInterceptor(MyInterceptor.class); 205 AspectManager.instance().addBinding(binding); 206 207 Interceptions.clear(); 208 POJO pojo = new POJO(); 209 pojo.i = 5; 210 assertEquals(5, pojo.i); 211 POJO.j = 0; 212 assertEquals(0, POJO.j); 213 assertEquals(1, Interceptions.size()); 214 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 215 216 AdviceBinding binding2 = new AdviceBinding("get(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 217 String name2 = binding2.getName(); 218 binding2.addInterceptor(MyInterceptor.class); 219 AspectManager.instance().addBinding(binding2); 220 221 Interceptions.clear(); 222 pojo.i = 5; 223 assertEquals(5, pojo.i); 224 POJO.j++; 225 assertEquals(2, Interceptions.size()); 226 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 227 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(1)); 228 229 AdviceBinding binding3 = new AdviceBinding("field(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 230 String name3 = binding3.getName(); 231 AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect"); 232 binding3.addInterceptorFactory(new AdviceFactory(myAspect, "intercept")); 233 binding3.addInterceptor(MyInterceptor.class); 234 AspectManager.instance().addBinding(binding3); 235 236 Interceptions.clear(); 237 pojo.i = 20; 238 assertEquals(3, Interceptions.size()); 239 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 240 assertEquals(Interceptions.getFieldWriteName("MyAspect", "POJO", "i"), Interceptions.get(1)); 241 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(2)); 242 243 Interceptions.clear(); 244 assertEquals(20, pojo.i); 245 assertEquals(3, Interceptions.size()); 246 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 247 assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(1)); 248 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2)); 249 250 AspectManager.instance().removeBinding(name); 251 AspectManager.instance().removeBinding(name2); 252 253 AdviceBinding binding4 = new AdviceBinding("field(static * org.jboss.test.aop.dynamicgenadvisor.POJO->j)", null); 254 String name4 = binding4.getName(); 255 binding4.addInterceptor(MyInterceptor.class); 256 AspectManager.instance().addBinding(binding4); 257 258 Interceptions.clear(); 259 pojo.i=15; 260 assertEquals(15, pojo.i); 261 assertEquals(4, Interceptions.size()); 262 assertEquals(Interceptions.getFieldWriteName("MyAspect", "POJO", "i"), Interceptions.get(0)); 263 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1)); 264 assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(2)); 265 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(3)); 266 267 Interceptions.clear(); 268 assertEquals(2, ++POJO.j); 269 assertEquals(2, Interceptions.size()); 270 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "j"), Interceptions.get(0)); 271 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "j"), Interceptions.get(1)); 272 273 Interceptions.clear(); 274 AspectManager.instance().removeBinding(name3); 275 AspectManager.instance().removeBinding(name4); 276 pojo.i++; 277 POJO.j++; 278 assertTrue(Interceptions.isEmpty()); 279 } 280 281 public void testSimpleInstanceUsingDomainForMethod()throws Exception 282 { 283 System.out.println("TEST SIMPLE INSTANCE USING DOMAIN FOR METHOD"); 284 POJO pojo1 = new POJO(); 285 POJO pojo2 = new POJO(); 286 287 AdviceBinding binding = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null); 288 String name = binding.getName(); 289 binding.addInterceptor(MyInterceptor.class); 290 getInstanceDomain(pojo2).addBinding(binding); 291 292 Interceptions.clear(); 293 pojo1.someMethod(123); 294 assertTrue(Interceptions.isEmpty()); 295 296 Interceptions.clear(); 297 pojo2.someMethod(123); 298 assertEquals(1, Interceptions.size()); 299 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 300 301 getInstanceDomain(pojo2).removeBinding(name); 302 303 Interceptions.clear(); 304 pojo1.someMethod(123); 305 pojo2.someMethod(123); 306 assertTrue(Interceptions.isEmpty()); 307 308 309 } 310 311 public void testInstanceUsingDomainForMethod()throws Exception 312 { 313 System.out.println("TEST INSTANCE USING DOMAIN FOR METHOD"); 314 AdviceBinding bindingTopA = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null); 315 String nameTopA = bindingTopA.getName(); 316 bindingTopA.addInterceptor(MyInterceptor.class); 317 AspectManager.instance().addBinding(bindingTopA); 318 319 POJO pojo1 = new POJO(); 320 POJO pojo2 = new POJO(); 321 322 Interceptions.clear(); 323 pojo1.someMethod(123); 324 pojo2.someMethod(123); 325 assertEquals(2, Interceptions.size()); 326 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 327 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(1)); 328 329 AdviceBinding bindingA = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null); 331 String nameA = bindingA.getName(); 332 bindingA.addInterceptor(MyInterceptor.class); 333 getInstanceDomain(pojo1).addBinding(bindingA); 334 335 AdviceBinding bindingB = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null); 336 String nameB = bindingB.getName(); 337 AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect"); 338 bindingB.addInterceptorFactory(new AdviceFactory(myAspect, "intercept")); 339 getInstanceDomain(pojo2).addBinding(bindingB); 340 341 System.out.println("Added instance advices"); 342 Interceptions.clear(); 343 pojo1.someMethod(123); 344 assertEquals(2, Interceptions.size()); 345 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 346 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(1)); 347 348 349 Interceptions.clear(); 350 pojo2.someMethod(123); 351 assertEquals(2, Interceptions.size()); 352 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 353 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1)); 354 355 POJO pojo3 = new POJO(); 357 AdviceBinding bindingTopB = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..))", null); 358 String nameTopB = bindingTopB.getName(); 359 bindingTopB.addInterceptor(YourInterceptor.class); 360 AspectManager.instance().addBinding(bindingTopB); 361 362 System.out.println("Added top level advice"); 363 364 Interceptions.clear(); 365 pojo1.someMethod(123); 366 assertEquals(3, Interceptions.size()); 367 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 368 assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(1)); 369 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(2)); 370 371 Interceptions.clear(); 372 pojo2.someMethod(123); 373 assertEquals(3, Interceptions.size()); 374 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 375 assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(1)); 376 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(2)); 377 378 379 Interceptions.clear(); 380 pojo3.someMethod(123); 381 assertEquals(2, Interceptions.size()); 382 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 383 assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(1)); 384 385 386 AspectManager.instance().removeBinding(nameTopB); 387 388 Interceptions.clear(); 389 pojo1.someMethod(123); 390 assertEquals(2, Interceptions.size()); 391 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 392 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(1)); 393 394 Interceptions.clear(); 395 pojo2.someMethod(123); 396 assertEquals(2, Interceptions.size()); 397 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 398 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1)); 399 400 getInstanceDomain(pojo1).removeBinding(nameA); 401 402 Interceptions.clear(); 403 pojo1.someMethod(123); 404 assertEquals(1, Interceptions.size()); 405 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 406 407 AspectManager.instance().removeBinding(nameTopA); 408 409 Interceptions.clear(); 410 pojo1.someMethod(123); 411 assertEquals(0, Interceptions.size()); 412 413 Interceptions.clear(); 414 415 pojo2.someMethod(123); 416 assertEquals(1, Interceptions.size()); 417 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(0)); 418 419 getInstanceDomain(pojo2).removeBinding(nameB); 420 421 Interceptions.clear(); 422 pojo1.someMethod(123); 423 pojo2.someMethod(123); 424 assertEquals(0, Interceptions.size()); 425 } 426 427 public void testSimpleInstanceUsingDomainForField() throws Exception 428 { 429 System.out.println("TEST SIMPLE INSTANCE USING DOMAIN FOR FIELD"); 430 POJO pojo1 = new POJO(); 431 POJO pojo2 = new POJO(); 432 433 AdviceBinding binding = new AdviceBinding("set(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 434 String name = binding.getName(); 435 AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect"); 436 binding.addInterceptorFactory(new AdviceFactory(myAspect, "intercept")); 437 getInstanceDomain(pojo2).addBinding(binding); 438 439 Interceptions.clear(); 440 pojo1.i = 10; 441 assertEquals(10, pojo1.i); 442 assertTrue(Interceptions.isEmpty()); 443 444 Interceptions.clear(); 445 pojo2.i = 20; 446 assertEquals(20, pojo2.i); 447 assertEquals(1, Interceptions.size()); 448 assertEquals(Interceptions.getFieldWriteName("MyAspect", "POJO", "i"), Interceptions.get(0)); 449 450 AdviceBinding binding2 = new AdviceBinding("get(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 451 String name2 = binding2.getName(); 452 binding2.addInterceptor(MyInterceptor.class); 453 getInstanceDomain(pojo2).addBinding(binding2); 454 455 Interceptions.clear(); 456 pojo2.i = 30; 457 assertEquals(30, pojo2.i); 458 assertEquals(2, Interceptions.size()); 459 assertEquals(Interceptions.getFieldWriteName("MyAspect", "POJO", "i"), Interceptions.get(0)); 460 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(1)); 461 462 463 getInstanceDomain(pojo2).removeBinding(name); 464 465 Interceptions.clear(); 466 pojo1.i = 15; 467 assertEquals(15, pojo1.i); 468 assertTrue(Interceptions.isEmpty()); 469 470 pojo2.i = 40; 471 assertEquals(0, Interceptions.size()); 472 assertEquals(40, pojo2.i); 473 assertEquals(1, Interceptions.size()); 474 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 475 476 getInstanceDomain(pojo2).removeBinding(name2); 477 478 Interceptions.clear(); 479 pojo1.i = pojo2.i; 480 pojo2.i = pojo2.i; 481 assertTrue(Interceptions.isEmpty()); 482 } 483 484 public void testInstanceUsingDomainForField()throws Exception 485 { 486 System.out.println("TEST INSTANCE USING DOMAIN FOR FIELD"); 487 AdviceBinding bindingTopA = new AdviceBinding("field(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 488 String nameTopA = bindingTopA.getName(); 489 bindingTopA.addInterceptor(MyInterceptor.class); 490 AspectManager.instance().addBinding(bindingTopA); 491 492 POJO pojo1 = new POJO(); 493 POJO pojo2 = new POJO(); 494 495 Interceptions.clear(); 496 pojo1.i = 10; 497 pojo2.i=20; 498 assertEquals(10, pojo1.i); 499 assertEquals(20, pojo2.i); 500 assertEquals(4, Interceptions.size()); 501 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 502 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1)); 503 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2)); 504 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(3)); 505 506 AdviceBinding bindingA = new AdviceBinding("set(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 508 String nameA = bindingA.getName(); 509 bindingA.addInterceptor(MyInterceptor.class); 510 getInstanceDomain(pojo1).addBinding(bindingA); 511 512 AdviceBinding bindingB = new AdviceBinding("get(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 513 String nameB = bindingB.getName(); 514 AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect"); 515 bindingB.addInterceptorFactory(new AdviceFactory(myAspect, "intercept")); 516 getInstanceDomain(pojo2).addBinding(bindingB); 517 518 System.out.println("Added instance advices"); 519 Interceptions.clear(); 520 pojo1.i = 50; 521 assertEquals(50, pojo1.i); 522 assertEquals(3, Interceptions.size()); 523 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 524 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1)); 525 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2)); 526 527 Interceptions.clear(); 528 pojo2.i = 100; 529 assertEquals(100, pojo2.i); 530 assertEquals(3, Interceptions.size()); 531 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 532 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(1)); 533 assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(2)); 534 535 POJO pojo3 = new POJO(); 537 AdviceBinding bindingTopB = new AdviceBinding("field(* org.jboss.test.aop.dynamicgenadvisor.POJO->i)", null); 538 String nameTopB = bindingTopB.getName(); 539 bindingTopB.addInterceptor(YourInterceptor.class); 540 AspectManager.instance().addBinding(bindingTopB); 541 542 System.out.println("Added top level advice"); 543 544 Interceptions.clear(); 545 pojo1.i = 66; 546 assertEquals(66, pojo1.i); 547 assertEquals(5, Interceptions.size()); 548 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 549 assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(1)); 550 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(2)); 551 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(3)); 552 assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(4)); 553 554 Interceptions.clear(); 555 pojo2.i = 99; 556 assertEquals(99, pojo2.i); 557 assertEquals(5, Interceptions.size()); 558 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 559 assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(1)); 560 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2)); 561 assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(3)); 562 assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(4)); 563 564 565 Interceptions.clear(); 566 pojo3.i = 12; 567 assertEquals(12, pojo3.i); 568 assertEquals(4, Interceptions.size()); 569 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 570 assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(1)); 571 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(2)); 572 assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(3)); 573 574 575 AspectManager.instance().removeBinding(nameTopA); 576 Interceptions.clear(); 577 pojo1.i = 50; 578 assertEquals(50, pojo1.i); 579 assertEquals(3, Interceptions.size()); 580 assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(0)); 581 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1)); 582 assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(2)); 583 584 Interceptions.clear(); 585 pojo2.i = 100; 586 assertEquals(100, pojo2.i); 587 assertEquals(3, Interceptions.size()); 588 assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(0)); 589 assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(1)); 590 assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(2)); 591 592 593 getInstanceDomain(pojo1).removeBinding(nameA); 594 595 Interceptions.clear(); 596 pojo1.i = 50; 597 assertEquals(50, pojo1.i); 598 assertEquals(2, Interceptions.size()); 599 assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(0)); 600 assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(1)); 601 602 Interceptions.clear(); 603 pojo2.i = 100; 604 assertEquals(100, pojo2.i); 605 assertEquals(3, Interceptions.size()); 606 assertEquals(Interceptions.getFieldWriteName("YourInterceptor", "POJO", "i"), Interceptions.get(0)); 607 assertEquals(Interceptions.getFieldReadName("YourInterceptor", "POJO", "i"), Interceptions.get(1)); 608 assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(2)); 609 610 AspectManager.instance().removeBinding(nameTopB); 611 Interceptions.clear(); 612 pojo1.i = 14; 613 assertEquals(14, pojo1.i); 614 pojo2.i = 100; 615 assertEquals(100, pojo2.i); 616 assertEquals(1, Interceptions.size()); 617 assertEquals(Interceptions.getFieldReadName("MyAspect", "POJO", "i"), Interceptions.get(0)); 618 619 getInstanceDomain(pojo2).removeBinding(nameB); 620 621 Interceptions.clear(); 622 pojo1.i = 123; 623 assertEquals(123, pojo1.i); 624 pojo2.i = 123; 625 assertEquals(123, pojo2.i); 626 assertEquals(0, Interceptions.size()); 627 } 628 629 public void testInstanceUsingOldApiForMethod() throws Exception 630 { 631 System.out.println("TEST INSTANCE USING OLD API FOR METHOD"); 632 POJO pojo1 = new POJO(); 633 AdviceBinding bindingTopA = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.*POJO->someMethod*(..))", null); 634 String nameTopA = bindingTopA.getName(); 635 AspectDefinition myAspect = AspectManager.instance().getAspectDefinition("org.jboss.test.aop.dynamicgenadvisor.MyAspect"); 636 bindingTopA.addInterceptorFactory(new AdviceFactory(myAspect, "intercept")); 637 AspectManager.instance().addBinding(bindingTopA); 638 639 Interceptions.clear(); 640 pojo1.someMethod(123); 641 assertEquals(1, Interceptions.size()); 642 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(0)); 643 644 System.out.println("---- Adding more interceptors"); 645 646 InstanceAdvisor pojoIa1 = ((Advised)pojo1)._getInstanceAdvisor(); 647 pojoIa1.insertInterceptor(new MyInterceptor()); 648 649 Interceptions.clear(); 650 pojo1.someMethod(123); 651 assertEquals(2, Interceptions.size()); 652 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 653 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1)); 654 655 pojoIa1.appendInterceptor(new YourInterceptor()); 656 657 Interceptions.clear(); 658 pojo1.someMethod(123); 659 assertEquals(3, Interceptions.size()); 660 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 661 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1)); 662 assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(2)); 663 664 System.out.println("Testing SubPOJO"); 665 SubPOJO sub1 = new SubPOJO(); 666 Interceptions.clear(); 667 sub1.someMethod(123); 668 assertEquals(1, Interceptions.size()); 669 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(0)); 670 671 InstanceAdvisor subPojoIa1 = ((Advised)sub1)._getInstanceAdvisor(); 672 subPojoIa1.insertInterceptor(new MyInterceptor()); 673 subPojoIa1.appendInterceptor(new YourInterceptor()); 674 675 Interceptions.clear(); 676 sub1.someMethod(123); 677 assertEquals(3, Interceptions.size()); 678 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 679 assertEquals(Interceptions.getMethodName("MyAspect", "POJO", "someMethod"), Interceptions.get(1)); 680 assertEquals(Interceptions.getMethodName("YourInterceptor", "POJO", "someMethod"), Interceptions.get(2)); 681 682 AspectManager.instance().removeBinding(nameTopA); 683 } 684 685 public void testAddAnnotation() throws Exception 686 { 687 System.out.println("TEST ADD ANNOTATION TO INSTANCE"); 688 POJO pojo1 = new POJO(); 689 POJO pojo2 = new POJO(); 690 POJO pojo3 = new POJO(); 691 POJO pojo4 = new POJO(); 692 693 AnnotationIntroduction intro1 = AnnotationIntroduction.createClassAnnotationIntroduction( 694 "org.jboss.test.aop.dynamicgenadvisor.POJO", 695 "@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation", 696 true); 697 getInstanceDomain(pojo1).addAnnotationOverride(intro1); 698 AdviceBinding binding1 = new AdviceBinding("execution(* @org.jboss.test.aop.dynamicgenadvisor.MyAnnotation->someMethod*(..))", null); 699 binding1.addInterceptor(MyInterceptor.class); 700 getInstanceDomain(pojo1).addBinding(binding1); 701 702 AnnotationIntroduction intro2 = AnnotationIntroduction.createFieldAnnotationIntroduction( 703 "int org.jboss.test.aop.dynamicgenadvisor.POJO->i", 704 "@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation", 705 true); 706 getInstanceDomain(pojo2).addAnnotationOverride(intro2); 707 AdviceBinding binding2 = new AdviceBinding("field(* org.jboss.test.aop.dynamicgenadvisor.POJO->@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation)", null); 708 binding2.addInterceptor(MyInterceptor.class); 709 getInstanceDomain(pojo2).addBinding(binding2); 710 711 AnnotationIntroduction intro3 = AnnotationIntroduction.createMethodAnnotationIntroduction( 712 "* org.jboss.test.aop.dynamicgenadvisor.POJO->someMethod(..)", 713 "@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation", 714 true); 715 getInstanceDomain(pojo3).addAnnotationOverride(intro3); 716 AdviceBinding binding3 = new AdviceBinding("execution(* org.jboss.test.aop.dynamicgenadvisor.POJO->@org.jboss.test.aop.dynamicgenadvisor.MyAnnotation(..))", null); 717 binding3.addInterceptor(MyInterceptor.class); 718 getInstanceDomain(pojo3).addBinding(binding3); 719 720 721 System.out.println("--- POJO1"); 722 Interceptions.clear(); 723 pojo1.someMethod(123); 724 pojo1.notPrepared(); 725 pojo1.i = pojo1.i; 726 assertEquals(1, Interceptions.size()); 727 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 728 729 System.out.println("--- POJO2"); 730 Interceptions.clear(); 731 pojo2.someMethod(123); 732 pojo2.notPrepared(); 733 pojo2.i = pojo2.i; 734 assertEquals(2, Interceptions.size()); 735 assertEquals(Interceptions.getFieldReadName("MyInterceptor", "POJO", "i"), Interceptions.get(0)); 736 assertEquals(Interceptions.getFieldWriteName("MyInterceptor", "POJO", "i"), Interceptions.get(1)); 737 738 System.out.println("--- POJO3"); 739 Interceptions.clear(); 740 pojo3.someMethod(123); 741 pojo3.notPrepared(); 742 pojo3.i = pojo3.i; 743 assertEquals(1, Interceptions.size()); 744 assertEquals(Interceptions.getMethodName("MyInterceptor", "POJO", "someMethod"), Interceptions.get(0)); 745 746 System.out.println("--- POJO4"); 747 Interceptions.clear(); 748 pojo4.someMethod(123); 749 pojo4.notPrepared(); 750 pojo4.i = pojo4.i; 751 assertEquals(0, Interceptions.size()); 752 } 753 754 755 public void testAddClassMetadata()throws Exception 756 { 757 System.out.println("TEST ADD CLASS METADATA"); 758 759 DynamicSimpleClassMetadataLoader loader = new DynamicSimpleClassMetadataLoader( 760 "T1", "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO"); 761 loader.addDefaultMetaData("default", "default"); 762 loader.addClassMetaData("class", "class"); 763 loader.addMethodMetaData("* someMethod(..)", "fm", "someMethod"); 764 loader.addFieldMetaData("i", "fm", "i"); 765 AspectManager.instance().addClassMetaData(loader.getClassMetaDataBinding()); 766 767 AdviceBinding binding = new AdviceBinding("all(org.jboss.test.aop.dynamicgenadvisor.POJO)", null); 768 binding.addInterceptor(MetadataInterceptor.class); 769 AspectManager.instance().addBinding(binding); 770 771 POJO pojo = new POJO(); 772 773 MetadataInterceptor.clear(); 774 pojo.someMethod(123); 775 pojo.i = 100; 776 pojo.notPrepared(); 777 assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size()); 778 assertEquals(2, MetadataInterceptor.lastClassMetadata.size()); 779 assertEquals(1, MetadataInterceptor.lastMethodMetadata.size()); 780 assertEquals(1, MetadataInterceptor.lastFieldMetadata.size()); 781 782 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0)); 784 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1)); 785 786 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0)); 787 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1)); 788 789 assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0)); 790 791 assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0)); 792 793 AspectManager.instance().removeClassMetaData(loader.getClassMetaDataBinding().getName()); 794 795 MetadataInterceptor.clear(); 796 pojo.someMethod(123); 797 pojo.i = 100; 798 pojo.notPrepared(); 799 assertEquals(0, MetadataInterceptor.lastDefaultMetadata.size()); 800 assertEquals(0, MetadataInterceptor.lastClassMetadata.size()); 801 assertEquals(0, MetadataInterceptor.lastMethodMetadata.size()); 802 assertEquals(0, MetadataInterceptor.lastFieldMetadata.size()); 803 804 AspectManager.instance().addClassMetaData(loader.getClassMetaDataBinding()); 806 807 MetadataInterceptor.clear(); 808 pojo.someMethod(123); 809 pojo.i = 100; 810 pojo.notPrepared(); 811 assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size()); 812 assertEquals(2, MetadataInterceptor.lastClassMetadata.size()); 813 assertEquals(1, MetadataInterceptor.lastMethodMetadata.size()); 814 assertEquals(1, MetadataInterceptor.lastFieldMetadata.size()); 815 816 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0)); 818 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1)); 819 820 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0)); 821 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1)); 822 823 assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0)); 824 825 assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0)); 826 827 AspectManager.instance().removeClassMetaData(loader.getClassMetaDataBinding().getName()); 828 829 MetadataInterceptor.clear(); 830 pojo.someMethod(123); 831 pojo.i = 100; 832 pojo.notPrepared(); 833 assertEquals(0, MetadataInterceptor.lastDefaultMetadata.size()); 834 assertEquals(0, MetadataInterceptor.lastClassMetadata.size()); 835 assertEquals(0, MetadataInterceptor.lastMethodMetadata.size()); 836 assertEquals(0, MetadataInterceptor.lastFieldMetadata.size()); 837 838 AspectManager.instance().removeBinding(binding.getName()); 839 MetadataInterceptor.clear(); 840 pojo.someMethod(123); 841 assertFalse(MetadataInterceptor.intercepted); 842 } 843 844 public void testBindingsUpdatedWhenAddMetadata() throws Exception 845 { 846 System.out.println("TEST BINDINGS UPDATED WHEN ADD METADATA"); 847 848 AdviceBinding binding = new AdviceBinding("all(@TEST)", null); 849 binding.addInterceptor(MetadataInterceptor.class); 850 AspectManager.instance().addBinding(binding); 851 852 MetadataInterceptor.clear(); 853 POJO pojox = new POJO(); 854 pojox.someMethod(123); 855 assertFalse(MetadataInterceptor.intercepted); 856 857 DynamicSimpleClassMetadataLoader loader = new DynamicSimpleClassMetadataLoader( 859 "DA", "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO"); 860 loader.addDefaultMetaData("default", "default"); 861 loader.addClassMetaData("class", "class"); 862 loader.addMethodMetaData("* someMethod(..)", "fm", "someMethod"); 863 loader.addFieldMetaData("i", "fm", "i"); 864 AspectManager.instance().addClassMetaData(loader.getClassMetaDataBinding()); 865 866 MetadataInterceptor.clear(); 867 POJO pojo = new POJO(); 868 pojo.someMethod(123); 869 int i = pojo.i; 870 assertTrue(MetadataInterceptor.intercepted); 871 assertEquals(3, MetadataInterceptor.lastDefaultMetadata.size()); 872 assertEquals(3, MetadataInterceptor.lastClassMetadata.size()); 873 assertEquals(1, MetadataInterceptor.lastMethodMetadata.size()); 874 assertEquals(1, MetadataInterceptor.lastFieldMetadata.size()); 875 876 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0)); 877 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1)); 878 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(2)); 879 880 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0)); 881 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1)); 882 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(2)); 883 884 assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0)); 885 886 assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0)); 887 888 AspectManager.instance().removeClassMetaData("DA"); 889 MetadataInterceptor.clear(); 890 pojo.someMethod(123); 891 pojo.i = 100; 892 assertFalse(MetadataInterceptor.intercepted); 893 894 getInstanceDomain(pojo).addClassMetaData(loader.getClassMetaDataBinding()); 896 MetadataInterceptor.clear(); 897 pojo.someMethod(123); 898 i = pojo.i; 899 assertTrue(MetadataInterceptor.intercepted); 900 assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size()); 901 assertEquals(2, MetadataInterceptor.lastClassMetadata.size()); 902 assertEquals(1, MetadataInterceptor.lastMethodMetadata.size()); 903 assertEquals(1, MetadataInterceptor.lastFieldMetadata.size()); 904 905 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0)); 906 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1)); 907 908 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0)); 909 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1)); 910 911 assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0)); 912 913 assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0)); 914 915 getInstanceDomain(pojo).removeClassMetaData(loader.getClassMetaDataBinding().getName()); 917 AspectManager.instance().removeBinding(binding.getName()); 918 MetadataInterceptor.clear(); 919 pojo.someMethod(123); 920 assertFalse(MetadataInterceptor.intercepted); 921 } 922 923 public void testAddInstanceMetadata() throws Exception 924 { 925 System.out.println("TEST ADD METADATA TO INSTANCE"); 926 POJO pojo1 = new POJO(); 927 POJO pojo2 = new POJO(); 928 POJO pojo3 = new POJO(); 929 930 DynamicSimpleClassMetadataLoader loader1 = new DynamicSimpleClassMetadataLoader( 931 "D1", "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO"); 932 loader1.addDefaultMetaData("default", "default1"); 933 loader1.addClassMetaData("class", "class1"); 934 loader1.addMethodMetaData("* someMethod(..)", "fm", "someMethod1"); 935 loader1.addFieldMetaData("i", "fm", "i1"); 936 937 DynamicSimpleClassMetadataLoader loader2 = new DynamicSimpleClassMetadataLoader( 938 "D1", "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO"); loader2.addDefaultMetaData("default", "default2"); 940 loader2.addClassMetaData("class", "class2"); 941 loader2.addMethodMetaData("* someMethod(..)", "fm", "someMethod2"); 942 loader2.addFieldMetaData("i", "fm", "i2"); 943 944 getInstanceDomain(pojo1).addClassMetaData(loader1.getClassMetaDataBinding()); 945 AdviceBinding binding1 = new AdviceBinding("all(@TEST)", null); 946 binding1.addInterceptor(MetadataInterceptor.class); 947 getInstanceDomain(pojo1).addBinding(binding1); 948 949 AdviceBinding binding2 = new AdviceBinding("all(@TEST)", null); 950 getInstanceDomain(pojo2).addClassMetaData(loader2.getClassMetaDataBinding()); 951 binding2.addInterceptor(MetadataInterceptor.class); 952 getInstanceDomain(pojo2).addBinding(binding2); 953 954 AdviceBinding binding3 = new AdviceBinding("all(org.jboss.test.aop.dynamicgenadvisor.POJO)", null); 955 binding3.addInterceptor(MetadataInterceptor.class); 956 getInstanceDomain(pojo3).addBinding(binding3); 957 958 MetadataInterceptor.clear(); 959 System.out.println("---POJO1 set i"); 960 pojo1.i = 10; 961 System.out.println("---POJO1 someMethod"); 962 pojo1.someMethod(123); 963 System.out.println("---POJO1 not Prepared"); 964 pojo1.notPrepared(); 965 966 System.out.println("---POJO2 set i"); 967 pojo2.i = 20; 968 System.out.println("---POJO2 someMethod"); 969 pojo2.someMethod(123); 970 System.out.println("---POJO2 not Prepared"); 971 pojo2.notPrepared(); 972 973 assertEquals(4, MetadataInterceptor.lastDefaultMetadata.size()); 974 assertEquals(4, MetadataInterceptor.lastClassMetadata.size()); 975 assertEquals(2, MetadataInterceptor.lastMethodMetadata.size()); 976 assertEquals(2, MetadataInterceptor.lastFieldMetadata.size()); 977 978 assertEquals("default1", MetadataInterceptor.lastDefaultMetadata.get(0)); 980 assertEquals("default1", MetadataInterceptor.lastDefaultMetadata.get(1)); 981 assertEquals("default2", MetadataInterceptor.lastDefaultMetadata.get(2)); 982 assertEquals("default2", MetadataInterceptor.lastDefaultMetadata.get(3)); 983 984 assertEquals("class1", MetadataInterceptor.lastClassMetadata.get(0)); 985 assertEquals("class1", MetadataInterceptor.lastClassMetadata.get(1)); 986 assertEquals("class2", MetadataInterceptor.lastClassMetadata.get(2)); 987 assertEquals("class2", MetadataInterceptor.lastClassMetadata.get(3)); 988 989 assertEquals("someMethod1", MetadataInterceptor.lastMethodMetadata.get(0)); 990 assertEquals("someMethod2", MetadataInterceptor.lastMethodMetadata.get(1)); 991 992 assertEquals("i1", MetadataInterceptor.lastFieldMetadata.get(0)); 993 assertEquals("i2", MetadataInterceptor.lastFieldMetadata.get(1)); 994 995 996 MetadataInterceptor.clear(); 998 System.out.println("---POJO3 set i"); 999 pojo3.i = 20; 1000 System.out.println("---POJO3 someMethod"); 1001 pojo3.someMethod(123); 1002 System.out.println("---POJO3 not Prepared"); 1003 pojo3.notPrepared(); 1004 1005 assertTrue(MetadataInterceptor.intercepted); 1006 assertEquals(0, MetadataInterceptor.lastDefaultMetadata.size()); 1007 assertEquals(0, MetadataInterceptor.lastClassMetadata.size()); 1008 assertEquals(0, MetadataInterceptor.lastMethodMetadata.size()); 1009 assertEquals(0, MetadataInterceptor.lastFieldMetadata.size()); 1010 1011 } 1012 1013 1014 public void testInstanceMetadataOverrides() throws Exception 1015 { 1016 System.out.println("TEST INSTANCE METADATA OVERRIDES"); 1017 1018 MetadataInterceptor.clear(); 1019 POJO pojo = new POJO(); 1020 POJO pojo1 = new POJO(); 1021 pojo.someMethod(123); 1022 assertFalse(MetadataInterceptor.intercepted); 1023 1024 AdviceBinding binding1 = new AdviceBinding("all(org.jboss.test.aop.dynamicgenadvisor.POJO)", null); 1025 binding1.addInterceptor(MetadataInterceptor.class); 1026 AspectManager.instance().addBinding(binding1); 1027 1028 DynamicSimpleClassMetadataLoader loader = new DynamicSimpleClassMetadataLoader( 1029 "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO"); 1030 loader.addDefaultMetaData("default", "default"); 1031 loader.addClassMetaData("class", "class"); 1032 loader.addMethodMetaData("* someMethod(..)", "fm", "someMethod"); 1033 loader.addFieldMetaData("i", "fm", "i"); 1034 AspectManager.instance().addClassMetaData(loader.getClassMetaDataBinding()); 1035 1036 DynamicSimpleClassMetadataLoader instanceLoader = new DynamicSimpleClassMetadataLoader( 1037 "TEST", "org.jboss.test.aop.dynamicgenadvisor.POJO"); 1038 instanceLoader.addDefaultMetaData("default", "defaultXXX"); 1039 instanceLoader.addClassMetaData("class", "classXXX"); 1040 instanceLoader.addMethodMetaData("* someMethod(..)", "fm", "someMethodXXX"); 1041 instanceLoader.addFieldMetaData("i", "fm", "iXXX"); 1042 getInstanceDomain(pojo1).addClassMetaData(instanceLoader.getClassMetaDataBinding()); 1043 1044 MetadataInterceptor.clear(); 1045 pojo.someMethod(123); 1046 pojo.i = 1000; 1047 assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size()); 1048 assertEquals(2, MetadataInterceptor.lastClassMetadata.size()); 1049 assertEquals(1, MetadataInterceptor.lastMethodMetadata.size()); 1050 assertEquals(1, MetadataInterceptor.lastFieldMetadata.size()); 1051 1052 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0)); 1054 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1)); 1055 1056 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0)); 1057 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1)); 1058 1059 assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0)); 1060 1061 assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0)); 1062 1063 MetadataInterceptor.clear(); 1064 pojo1.someMethod(123); 1065 pojo1.i = 1000; 1066 assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size()); 1067 assertEquals(2, MetadataInterceptor.lastClassMetadata.size()); 1068 assertEquals(1, MetadataInterceptor.lastMethodMetadata.size()); 1069 assertEquals(1, MetadataInterceptor.lastFieldMetadata.size()); 1070 1071 assertEquals("defaultXXX", MetadataInterceptor.lastDefaultMetadata.get(0)); 1073 assertEquals("defaultXXX", MetadataInterceptor.lastDefaultMetadata.get(1)); 1074 1075 assertEquals("classXXX", MetadataInterceptor.lastClassMetadata.get(0)); 1076 assertEquals("classXXX", MetadataInterceptor.lastClassMetadata.get(1)); 1077 1078 assertEquals("someMethodXXX", MetadataInterceptor.lastMethodMetadata.get(0)); 1079 1080 assertEquals("iXXX", MetadataInterceptor.lastFieldMetadata.get(0)); 1081 1082 1083 getInstanceDomain(pojo1).removeClassMetaData(instanceLoader.getClassMetaDataBinding().getName()); 1084 1085 MetadataInterceptor.clear(); 1086 pojo1.someMethod(123); 1087 pojo1.i = 1000; 1088 assertEquals(2, MetadataInterceptor.lastDefaultMetadata.size()); 1089 assertEquals(2, MetadataInterceptor.lastClassMetadata.size()); 1090 assertEquals(1, MetadataInterceptor.lastMethodMetadata.size()); 1091 assertEquals(1, MetadataInterceptor.lastFieldMetadata.size()); 1092 1093 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(0)); 1095 assertEquals("default", MetadataInterceptor.lastDefaultMetadata.get(1)); 1096 1097 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(0)); 1098 assertEquals("class", MetadataInterceptor.lastClassMetadata.get(1)); 1099 1100 assertEquals("someMethod", MetadataInterceptor.lastMethodMetadata.get(0)); 1101 1102 assertEquals("i", MetadataInterceptor.lastFieldMetadata.get(0)); 1103 1104 AspectManager.instance().removeClassMetaData(loader.getClassMetaDataBinding().getName()); 1105 AspectManager.instance().removeBinding(binding1.getName()); 1106 MetadataInterceptor.clear(); 1107 pojo.someMethod(123); 1108 assertFalse(MetadataInterceptor.intercepted); 1109 } 1110 1111 private Domain getInstanceDomain(Object obj) 1112 { 1113 Advised advised = ((Advised)obj); 1114 InstanceAdvisor advisor = advised._getInstanceAdvisor(); 1115 return advisor.getDomain(); 1116 } 1117 1118 public static void main(String [] args) 1119 { 1120 TestRunner.run(suite()); 1121 } 1122} 1123 | Popular Tags |