# HG changeset patch # User Jaroslav Tulach # Date 1213429872 -7200 # Node ID 913d1d0a7bdf371c90926ba9037c7fa6027bd12f # Parent efe17ee2507d10814b31367f73f50fc616550fa8 Creating project to demonstrate problems with lookup inconsistencies diff -r efe17ee2507d -r 913d1d0a7bdf samples/consistency/build.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/consistency/build.xml Sat Jun 14 09:51:12 2008 +0200 @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r efe17ee2507d -r 913d1d0a7bdf samples/consistency/nbproject/project.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/consistency/nbproject/project.xml Sat Jun 14 09:51:12 2008 +0200 @@ -0,0 +1,89 @@ + + + org.netbeans.modules.ant.freeform + + + consistency + + + + consistency + + + + + java + src-api1.0 + UTF-8 + + + + java + src-api2.0 + UTF-8 + + + + java + src-test + UTF-8 + + + + + build + + + clean + + + test + + + clean + build + + + + + + + src-api1.0 + + + + src-api2.0 + + + + src-test + + + build.xml + + + + + + + + + + + + + src-api1.0 + 1.5 + + + src-api2.0 + 1.5 + + + src-test + src-api1.0:../libs/dist/junit-4.4.jar + 1.5 + + + + diff -r efe17ee2507d -r 913d1d0a7bdf samples/consistency/src-api1.0/api/Lookup.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/consistency/src-api1.0/api/Lookup.java Sat Jun 14 09:51:12 2008 +0200 @@ -0,0 +1,26 @@ +package api; + +import java.util.Collection; +import java.util.Set; + +/** Simplified version of NetBeans + * Lookup class. + * + * @author Jaroslav Tulach + * @version 1.0 + */ +// BEGIN: design.consistency.1.0 +public abstract class Lookup { + // BEGIN: design.consistency.lookup.1.0 + public abstract T lookup(Class clazz); + // END: design.consistency.lookup.1.0 + + // BEGIN: design.consistency.lookupAll.1.0 + public abstract Collection lookupAll(Class clazz); + // END: design.consistency.lookupAll.1.0 + + // BEGIN: design.consistency.lookupAllClasses.1.0 + public abstract Set> lookupAllClasses(Class clazz); + // END: design.consistency.lookupAllClasses.1.0 +} +// END: design.consistency.1.0 diff -r efe17ee2507d -r 913d1d0a7bdf samples/consistency/src-api1.0/api/Lookups.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/consistency/src-api1.0/api/Lookups.java Sat Jun 14 09:51:12 2008 +0200 @@ -0,0 +1,18 @@ +package api; + +import java.util.Collection; +import java.util.Set; + +/** Factory to create various types of lookup instances. + * + * @author Jaroslav Tulach + * @version 1.0 + */ +public final class Lookups { + private Lookups() { + } + + public static Lookup fixed(Object... instances) { + return null; + } +} diff -r efe17ee2507d -r 913d1d0a7bdf samples/consistency/src-api2.0/api/Lookup.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/consistency/src-api2.0/api/Lookup.java Sat Jun 14 09:51:12 2008 +0200 @@ -0,0 +1,38 @@ +package api; + +import java.util.Collection; +import java.util.Set; + +/** Simplified version of NetBeans + * Lookup + * reimplemented to separate the API for clients + * from the API for implementators while guaranteeing + * consistency among all there methods. + * + * @author Jaroslav Tulach + * @version 2.0 + */ +// BEGIN: design.consistency.2.0 +public final class Lookup { + Lookup() { + } + + // BEGIN: design.consistency.lookup.2.0 + public T lookup(Class clazz) { + return null; + } + // END: design.consistency.lookup.2.0 + + // BEGIN: design.consistency.lookupAll.2.0 + public Collection lookupAll(Class clazz) { + return null; + } + // END: design.consistency.lookupAll.2.0 + + // BEGIN: design.consistency.lookupAllClasses.2.0 + public Set> lookupAllClasses(Class clazz) { + return null; + } + // END: design.consistency.lookupAllClasses.2.0 +} +// END: design.consistency.2.0 \ No newline at end of file diff -r efe17ee2507d -r 913d1d0a7bdf samples/consistency/src-api2.0/api/Lookups.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/consistency/src-api2.0/api/Lookups.java Sat Jun 14 09:51:12 2008 +0200 @@ -0,0 +1,26 @@ +package api; + +import java.util.Collection; +import java.util.Set; + +/** Factory to create various types of lookup instances. + * + * @author Jaroslav Tulach + * @version 2.0 + */ +public final class Lookups { + private Lookups() { + } + + public static Lookup fixed(Object... instances) { + return null; + } + + public static Lookup dynamic(Dynamic provider) { + return null; + } + + public interface Dynamic { + public void computeInstances(Class requestedType, Collection addInstancesTo); + } +} diff -r efe17ee2507d -r 913d1d0a7bdf samples/consistency/src-test/api/ArithmeticaTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/consistency/src-test/api/ArithmeticaTest.java Sat Jun 14 09:51:12 2008 +0200 @@ -0,0 +1,43 @@ +package api; + +import junit.framework.TestCase; + +/** + * + * @author Jaroslav Tulach + */ +public class ArithmeticaTest extends TestCase { + + public ArithmeticaTest(String testName) { + super(testName); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + //BEGIN: design.composition.arith.test + public void testSumTwo() { + Arithmetica instance = new Arithmetica(); + assertEquals("+", 5, instance.sumTwo(3, 2)); + } + + public void testSumAll() { + Arithmetica instance = new Arithmetica(); + assertEquals("+", 6, instance.sumAll(3, 2, 1)); + } + + public void testSumRange() { + Arithmetica instance = new Arithmetica(); + assertEquals("+", 6, instance.sumRange(1, 3)); + assertEquals("10", 55, instance.sumRange(1, 10)); + } + //END: design.composition.arith.test + +} diff -r efe17ee2507d -r 913d1d0a7bdf samples/consistency/src-test/api/FactorialTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/consistency/src-test/api/FactorialTest.java Sat Jun 14 09:51:12 2008 +0200 @@ -0,0 +1,59 @@ +/* + * Žluťoučký kůň je naše hříbátko. + * and open the template in the editor. + */ + +package api; + +import junit.framework.TestCase; + +/** + * + * @author Jaroslav Tulach + */ +public class FactorialTest extends TestCase { + + public FactorialTest(String testName) { + super(testName); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testFactorial3() { + assertEquals(6, Factorial.factorial(3)); + } + + public void testFactorial4() { + assertEquals(24, Factorial.factorial(4)); + } + + public void testFactorial5() { + assertEquals(120, Factorial.factorial(5)); + } + + /** Class showing inventive, non-expected use of + * Arithmetica methods to do multiplication instead of + * addition. + */ + //BEGIN: design.composition.arith.factorial + public static final class Factorial extends Arithmetica { + public static int factorial(int n) { + return new Factorial().sumRange(1, n); + } + @Override + public int sumTwo(int one, int second) { + return one * second; + } + } + //END: design.composition.arith.factorial + + +}