1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/instanceof/test/impl/InstanceProviderTest.java Sat Jun 14 09:53:33 2008 +0200
1.3 @@ -0,0 +1,99 @@
1.4 +package impl;
1.5 +
1.6 +import api.BetterInstanceProvider;
1.7 +import api.InstanceProvider;
1.8 +import org.junit.After;
1.9 +import org.junit.AfterClass;
1.10 +import org.junit.Before;
1.11 +import org.junit.BeforeClass;
1.12 +import org.junit.Test;
1.13 +import static org.junit.Assert.*;
1.14 +
1.15 +public class InstanceProviderTest {
1.16 +
1.17 + public InstanceProviderTest() {
1.18 + }
1.19 +
1.20 + @BeforeClass
1.21 + public static void setUpClass() throws Exception {
1.22 + }
1.23 +
1.24 + @AfterClass
1.25 + public static void tearDownClass() throws Exception {
1.26 + }
1.27 +
1.28 + @Before
1.29 + public void setUp() {
1.30 + }
1.31 +
1.32 + @After
1.33 + public void tearDown() {
1.34 + }
1.35 +
1.36 + @Test
1.37 + public void verifyBehaviourOnOldInterface() {
1.38 + class IP implements InstanceProvider {
1.39 + int instanceClass;
1.40 + int instanceCreate;
1.41 +
1.42 + public Class<?> instanceClass() {
1.43 + instanceClass++;
1.44 + return String.class;
1.45 + }
1.46 +
1.47 + public Object instanceCreate() {
1.48 + instanceCreate++;
1.49 + return "API Design!";
1.50 + }
1.51 + }
1.52 + IP instance = new IP();
1.53 +
1.54 + boolean isString = checkIsString(instance);
1.55 + assertTrue("Provides string", isString);
1.56 + assertEquals("Class was tested", 1, instance.instanceClass);
1.57 + assertEquals("No instance created", 0, instance.instanceCreate);
1.58 + }
1.59 +
1.60 + @Test
1.61 + public void verifyBehaviourOnNewInterface() {
1.62 + class IP implements BetterInstanceProvider {
1.63 + int isInstanceOf;
1.64 + int instanceClass;
1.65 + int instanceCreate;
1.66 +
1.67 + public Class<?> instanceClass() {
1.68 + instanceClass++;
1.69 + return String.class;
1.70 + }
1.71 +
1.72 + public Object instanceCreate() {
1.73 + instanceCreate++;
1.74 + return "API Design!";
1.75 + }
1.76 +
1.77 + public boolean isInstanceOf(Class<?> c) {
1.78 + isInstanceOf++;
1.79 + return c.isAssignableFrom(String.class);
1.80 + }
1.81 + }
1.82 + IP instance = new IP();
1.83 +
1.84 + boolean isString = checkIsString(instance);
1.85 + assertTrue("Provides string", isString);
1.86 + assertEquals("Class was not tested", 0, instance.instanceClass);
1.87 + assertEquals("No instance created", 0, instance.instanceCreate);
1.88 + assertEquals("isInstanceOf called", 1, instance.isInstanceOf);
1.89 + }
1.90 +
1.91 + private static boolean checkIsString(InstanceProvider instance) {
1.92 + // BEGIN: instanceof.Use
1.93 + if (instance instanceof BetterInstanceProvider) {
1.94 + BetterInstanceProvider bip = (BetterInstanceProvider)instance;
1.95 + return bip.isInstanceOf(String.class);
1.96 + } else {
1.97 + return String.class.isAssignableFrom(instance.instanceClass());
1.98 + }
1.99 + // END: instanceof.Use
1.100 + }
1.101 +
1.102 +}
1.103 \ No newline at end of file