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.

WeavingContextTest.java 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /*******************************************************************************
  2. * Copyright (c) 2006 IBM Corporation and others.
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which accompanies this distribution, and is available at
  6. * http://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * Matthew Webster - initial implementation
  10. *******************************************************************************/
  11. package org.aspectj.weaver.loadtime;
  12. import java.io.File;
  13. import java.io.IOException;
  14. import java.net.URL;
  15. import java.net.URLClassLoader;
  16. import java.util.Enumeration;
  17. import java.util.List;
  18. import org.aspectj.weaver.tools.WeavingAdaptor;
  19. import junit.framework.TestCase;
  20. public class WeavingContextTest extends TestCase {
  21. private boolean called;
  22. public void testWeavingContext() {
  23. URLClassLoader loader = new URLClassLoader(new URL[] {},null);
  24. IWeavingContext context = new TestWeavingContext(loader);
  25. ClassLoaderWeavingAdaptor adaptor = new ClassLoaderWeavingAdaptor();
  26. adaptor.initialize(loader,context);
  27. }
  28. public void testGetResources() {
  29. URLClassLoader loader = new URLClassLoader(new URL[] {},null);
  30. IWeavingContext context = new TestWeavingContext(loader) {
  31. public Enumeration getResources(String name) throws IOException {
  32. called = true;
  33. return super.getResources(name);
  34. }
  35. };
  36. ClassLoaderWeavingAdaptor adaptor = new ClassLoaderWeavingAdaptor();
  37. adaptor.initialize(loader,context);
  38. assertTrue("IWeavingContext not called",called);
  39. }
  40. public void testGetBundleIdFromURL() {
  41. URLClassLoader loader = new URLClassLoader(new URL[] {},null);
  42. IWeavingContext context = new TestWeavingContext(loader) {
  43. public String getBundleIdFromURL(URL url) {
  44. throw new UnsupportedOperationException();
  45. }
  46. };
  47. ClassLoaderWeavingAdaptor adaptor = new ClassLoaderWeavingAdaptor();
  48. try {
  49. adaptor.initialize(loader,context);
  50. }
  51. catch (UnsupportedOperationException ex) {
  52. fail("IWeavingContect.getBundleIdFromURL() is deprecated");
  53. }
  54. }
  55. public void testGetClassLoaderName() {
  56. URLClassLoader loader = new URLClassLoader(new URL[] {},null);
  57. IWeavingContext context = new TestWeavingContext(loader) {
  58. public String getClassLoaderName () {
  59. called = true;
  60. return super.getClassLoaderName();
  61. }
  62. };
  63. ClassLoaderWeavingAdaptor adaptor = new ClassLoaderWeavingAdaptor();
  64. adaptor.initialize(loader,context);
  65. assertTrue("IWeavingContext not called",called);
  66. }
  67. public void testGetFile() throws IOException {
  68. File file = new File("../loadtime/testdata");
  69. URL fileURL = file.getCanonicalFile().toURL();
  70. URLClassLoader loader = new URLClassLoader(new URL[] { fileURL },null);
  71. IWeavingContext context = new TestWeavingContext(loader) {
  72. public String getFile (URL url) {
  73. called = true;
  74. return super.getFile(url);
  75. }
  76. };
  77. ClassLoaderWeavingAdaptor adaptor = new ClassLoaderWeavingAdaptor();
  78. adaptor.initialize(loader,context);
  79. assertTrue("IWeavingContext not called",called);
  80. }
  81. public void testGetId() throws IOException {
  82. File file = new File("../loadtime/testdata");
  83. URL fileURL = file.getCanonicalFile().toURL();
  84. URLClassLoader loader = new URLClassLoader(new URL[] { fileURL },null);
  85. IWeavingContext context = new TestWeavingContext(loader) {
  86. public String getId () {
  87. called = true;
  88. return super.getId();
  89. }
  90. };
  91. ClassLoaderWeavingAdaptor adaptor = new ClassLoaderWeavingAdaptor();
  92. adaptor.initialize(loader,context);
  93. assertTrue("IWeavingContext not called",called);
  94. }
  95. public void testGetDefinitions () throws Exception {
  96. File file = new File("../loadtime/testdata");
  97. URL fileURL = file.getCanonicalFile().toURL();
  98. URLClassLoader loader = new URLClassLoader(new URL[] { fileURL },null);
  99. IWeavingContext context = new TestWeavingContext(loader) {
  100. public List getDefinitions(ClassLoader loader, WeavingAdaptor adaptor) {
  101. called = true;
  102. return super.getDefinitions(loader,adaptor);
  103. }
  104. };
  105. ClassLoaderWeavingAdaptor adaptor = new ClassLoaderWeavingAdaptor();
  106. adaptor.initialize(loader,context);
  107. assertTrue("getDefinitions not called",called);
  108. }
  109. private static class TestWeavingContext implements IWeavingContext {
  110. private ClassLoader loader;
  111. public TestWeavingContext (ClassLoader classLoader) {
  112. this.loader = classLoader;
  113. }
  114. public String getBundleIdFromURL(URL url) {
  115. return null;
  116. }
  117. public String getClassLoaderName() {
  118. return "ClassLoaderName";
  119. }
  120. public ClassLoader getClassLoader() { return this.loader;}
  121. public String getFile(URL url) {
  122. return "File";
  123. }
  124. public String getId() {
  125. return "Id";
  126. }
  127. public Enumeration getResources(String name) throws IOException {
  128. return loader.getResources(name);
  129. }
  130. public boolean isLocallyDefined(String classname) {
  131. String asResource = classname.replace('.', '/').concat(".class");
  132. URL localURL = loader.getResource(asResource);
  133. if (localURL == null) return false;
  134. boolean isLocallyDefined = true;
  135. ClassLoader parent = loader.getParent();
  136. if (parent != null) {
  137. URL parentURL = parent.getResource(asResource);
  138. if (localURL.equals(parentURL)) isLocallyDefined = false;
  139. }
  140. return isLocallyDefined;
  141. }
  142. public List getDefinitions(ClassLoader loader, WeavingAdaptor adaptor) {
  143. return ((ClassLoaderWeavingAdaptor)adaptor).parseDefinitions(loader);
  144. }
  145. }
  146. protected void setUp() throws Exception {
  147. super.setUp();
  148. this.called = false;
  149. }
  150. }