/core/src/test/java/org/powermock/core/classloader/MockClassLoaderTest.java

http://powermock.googlecode.com/ · Java · 117 lines · 80 code · 14 blank · 23 comment · 0 complexity · 226cad193ffc02999d2e04ee3dbdaa94 MD5 · raw file

  1. /*
  2. * Copyright 2011 the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.powermock.core.classloader;
  17. import junit.framework.Assert;
  18. import org.junit.Test;
  19. import org.powermock.core.transformers.MockTransformer;
  20. import org.powermock.core.transformers.impl.MainMockTransformer;
  21. import org.powermock.reflect.Whitebox;
  22. import java.net.URL;
  23. import java.net.URLClassLoader;
  24. import java.util.Enumeration;
  25. import java.util.LinkedList;
  26. import java.util.List;
  27. import static org.junit.Assert.*;
  28. public class MockClassLoaderTest {
  29. @Test
  30. public void autoboxingWorks() throws Exception {
  31. String name = this.getClass().getPackage().getName() + ".HardToTransform";
  32. final MockClassLoader mockClassLoader = new MockClassLoader(new String[] { name });
  33. List<MockTransformer> list = new LinkedList<MockTransformer>();
  34. list.add(new MainMockTransformer());
  35. mockClassLoader.setMockTransformerChain(list);
  36. Class<?> c = mockClassLoader.loadClass(name);
  37. Object object = c.newInstance();
  38. Whitebox.invokeMethod(object, "run");
  39. Assert.assertEquals(5, Whitebox.invokeMethod(object, "testInt"));
  40. Assert.assertEquals(5L, Whitebox.invokeMethod(object, "testLong"));
  41. Assert.assertEquals(5f, Whitebox.invokeMethod(object, "testFloat"));
  42. Assert.assertEquals(5.0, Whitebox.invokeMethod(object, "testDouble"));
  43. Assert.assertEquals(new Short("5"), Whitebox.invokeMethod(object, "testShort"));
  44. Assert.assertEquals(new Byte("5"), Whitebox.invokeMethod(object, "testByte"));
  45. Assert.assertEquals(true, Whitebox.invokeMethod(object, "testBoolean"));
  46. Assert.assertEquals('5', Whitebox.invokeMethod(object, "testChar"));
  47. Assert.assertEquals("5", Whitebox.invokeMethod(object, "testString"));
  48. }
  49. @Test
  50. public void powerMockIgnoreAnnotatedPackagesAreIgnored() throws Exception {
  51. MockClassLoader mockClassLoader = new MockClassLoader(new String[] { "org.mytest.myclass" });
  52. Whitebox.setInternalState(mockClassLoader, new String[] { "*mytest*" }, DeferSupportingClassLoader.class);
  53. assertFalse(Whitebox.<Boolean> invokeMethod(mockClassLoader, "shouldModify", "org.mytest.myclass"));
  54. }
  55. @Test
  56. public void prepareForTestPackagesArePrepared() throws Exception {
  57. MockClassLoader mockClassLoader = new MockClassLoader(new String[] { "*mytest*" });
  58. assertTrue(Whitebox.<Boolean> invokeMethod(mockClassLoader, "shouldModify", "org.mytest.myclass"));
  59. }
  60. @Test
  61. public void shouldAddIgnorePackagesToDefer() throws Exception {
  62. MockClassLoader mockClassLoader = new MockClassLoader(new String[0]);
  63. mockClassLoader.addIgnorePackage("test*");
  64. String[] deferPackages = Whitebox.<String[]> getInternalState(mockClassLoader, "deferPackages");
  65. assertTrue(deferPackages.length > 1);
  66. assertEquals("test*", deferPackages[deferPackages.length - 1]);
  67. }
  68. @Test
  69. public void canFindResource() throws Exception {
  70. final MockClassLoader mockClassLoader = new MockClassLoader(new String[0]);
  71. List<MockTransformer> list = new LinkedList<MockTransformer>();
  72. list.add(new MainMockTransformer());
  73. mockClassLoader.setMockTransformerChain(list);
  74. // Force a ClassLoader that can find 'foo/bar/baz/test.txt' into
  75. // mockClassLoader.deferTo.
  76. URL fooRoot = this.getClass().getClassLoader().getResource("org/powermock/core/classloader/");
  77. mockClassLoader.deferTo = new URLClassLoader(new URL[] { fooRoot });;
  78. // MockClassLoader will only be able to find 'foo/bar/baz/test.txt' if it
  79. // properly defers the resource lookup to its deferTo ClassLoader.
  80. URL resource = mockClassLoader.getResource("foo/bar/baz/test.txt");
  81. Assert.assertNotNull(resource);
  82. Assert.assertTrue(resource.getPath().endsWith("test.txt"));
  83. }
  84. @Test
  85. public void canFindResources() throws Exception {
  86. final MockClassLoader mockClassLoader = new MockClassLoader(new String[0]);
  87. List<MockTransformer> list = new LinkedList<MockTransformer>();
  88. list.add(new MainMockTransformer());
  89. mockClassLoader.setMockTransformerChain(list);
  90. // Force a ClassLoader that can find 'foo/bar/baz/test.txt' into
  91. // mockClassLoader.deferTo.
  92. URL fooRoot = this.getClass().getClassLoader().getResource("org/powermock/core/classloader/");
  93. mockClassLoader.deferTo = new URLClassLoader(new URL[] { fooRoot });;
  94. // MockClassLoader will only be able to find 'foo/bar/baz/test.txt' if it
  95. // properly defers the resources lookup to its deferTo ClassLoader.
  96. Enumeration<URL> resources = mockClassLoader.getResources("foo/bar/baz/test.txt");
  97. Assert.assertNotNull(resources);
  98. Assert.assertTrue(resources.hasMoreElements());
  99. URL resource = resources.nextElement();
  100. Assert.assertTrue(resource.getPath().endsWith("test.txt"));
  101. Assert.assertFalse(resources.hasMoreElements());
  102. }
  103. }