/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package otherTests;
import static org.junit.Assert.*;
import org.junit.*;
import org.junit.runners.*;
import mockit.*;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public final class SubclassTest
{
private static boolean superClassConstructorCalled;
private static boolean subClassConstructorCalled;
public static class SuperClass
{
final String name;
public SuperClass(int x, String name)
{
this.name = name + x;
superClassConstructorCalled = true;
}
}
public static class SubClass extends SuperClass
{
public SubClass(String name)
{
super(name.length(), name);
subClassConstructorCalled = true;
}
}
@Before
public void setUp()
{
superClassConstructorCalled = false;
subClassConstructorCalled = false;
}
@Test
public void captureSubclassThroughClassfileTransformer(@Capturing SuperClass captured)
{
new SubClass("capture");
assertFalse(superClassConstructorCalled);
assertFalse(subClassConstructorCalled);
}
@Test
public void captureSubclassThroughRedefinitionOfPreviouslyLoadedClasses(@Capturing SuperClass captured)
{
new SubClass("capture");
assertFalse(superClassConstructorCalled);
assertFalse(subClassConstructorCalled);
}
@Test
public void mockSubclassUsingExpectationsWithFirstSuperConstructor(@Mocked SubClass mock)
{
new Expectations() {{
new SubClass("test");
}};
new SubClass("test");
assertFalse(superClassConstructorCalled);
assertFalse(subClassConstructorCalled);
}
@Test
public void partiallyMockSubclassByMockingASingleConstructor()
{
new Expectations(SubClass.class) {{
new SubClass("test");
}};
new SubClass("test");
assertTrue(superClassConstructorCalled);
assertFalse(subClassConstructorCalled);
}
}