You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(80) |
Nov
(42) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(11) |
Feb
(50) |
Mar
(70) |
Apr
(102) |
May
(28) |
Jun
(45) |
Jul
(14) |
Aug
(75) |
Sep
(17) |
Oct
(15) |
Nov
(11) |
Dec
(4) |
2003 |
Jan
(16) |
Feb
(19) |
Mar
(21) |
Apr
(20) |
May
(29) |
Jun
(7) |
Jul
(5) |
Aug
|
Sep
|
Oct
(2) |
Nov
(3) |
Dec
(3) |
2004 |
Jan
(5) |
Feb
(4) |
Mar
(1) |
Apr
(1) |
May
(1) |
Jun
(1) |
Jul
(7) |
Aug
(1) |
Sep
(6) |
Oct
(6) |
Nov
(1) |
Dec
(2) |
2005 |
Jan
(4) |
Feb
(4) |
Mar
(15) |
Apr
(1) |
May
|
Jun
(4) |
Jul
(6) |
Aug
(6) |
Sep
|
Oct
(4) |
Nov
(2) |
Dec
(4) |
2006 |
Jan
|
Feb
(91) |
Mar
(47) |
Apr
(7) |
May
(4) |
Jun
(9) |
Jul
(1) |
Aug
|
Sep
(5) |
Oct
(36) |
Nov
(95) |
Dec
(12) |
2007 |
Jan
(11) |
Feb
(31) |
Mar
(45) |
Apr
(11) |
May
(9) |
Jun
(1) |
Jul
(146) |
Aug
(15) |
Sep
|
Oct
(3) |
Nov
(6) |
Dec
(1) |
2008 |
Jan
(2) |
Feb
(1) |
Mar
(1) |
Apr
(1) |
May
(1) |
Jun
(3) |
Jul
(2) |
Aug
(19) |
Sep
(1) |
Oct
(10) |
Nov
|
Dec
(8) |
2009 |
Jan
(3) |
Feb
(1) |
Mar
(4) |
Apr
(8) |
May
(5) |
Jun
(4) |
Jul
(2) |
Aug
(1) |
Sep
(2) |
Oct
(13) |
Nov
(13) |
Dec
(4) |
2010 |
Jan
(1) |
Feb
(2) |
Mar
(1) |
Apr
(2) |
May
|
Jun
(1) |
Jul
(3) |
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2011 |
Jan
(1) |
Feb
(4) |
Mar
(3) |
Apr
(4) |
May
|
Jun
(12) |
Jul
(16) |
Aug
(4) |
Sep
(7) |
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
(5) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
From: David S. <ds...@us...> - 2007-07-02 18:11:21
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/test Added Files: TheoryTests.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: TheoryTests.java --- package org.junit.experimental.theories.test; import org.junit.experimental.theories.test.assertion.AssumptionViolatedExceptionTest; import org.junit.experimental.theories.test.imposterization.AssumePassingTest; import org.junit.experimental.theories.test.imposterization.PopperImposterizerTest; import org.junit.experimental.theories.test.imposterization.ThrownMatcherTest; import org.junit.experimental.theories.test.javamodel.ConcreteFunctionTest; import org.junit.experimental.theories.test.javamodel.FunctionTest; import org.junit.experimental.theories.test.matchers.CamelCaseNameTest; import org.junit.experimental.theories.test.matchers.ClassNamedMatcherTest; import org.junit.experimental.theories.test.matchers.EachTest; import org.junit.experimental.theories.test.matchers.MatcherCharacterization; import org.junit.experimental.theories.test.matchers.MethodNamedMatcherTest; import org.junit.experimental.theories.test.matchers.StackTraceTest; import org.junit.experimental.theories.test.results.PrintableResultTest; import org.junit.experimental.theories.test.results.ResultMatchersTest; import org.junit.experimental.theories.test.runner.DataPointMethodTest; import org.junit.experimental.theories.test.runner.ParameterizedAssertionErrorTest; import org.junit.experimental.theories.test.runner.TheoriesTest; import org.junit.experimental.theories.test.runner.TheoryContainerReferenceTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses( { AssumptionViolatedExceptionTest.class, ConcreteFunctionTest.class, CamelCaseNameTest.class, ClassNamedMatcherTest.class, EachTest.class, MatcherCharacterization.class, MethodNamedMatcherTest.class, StackTraceTest.class, ParameterizedAssertionErrorTest.class, TheoriesTest.class, TheoryContainerReferenceTest.class, FunctionTest.class, PrintableResultTest.class, ResultMatchersTest.class, DataPointMethodTest.class, AssumePassingTest.class, PopperImposterizerTest.class, ThrownMatcherTest.class }) public class TheoryTests { } |
From: David S. <ds...@us...> - 2007-07-02 18:11:20
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/runner/api In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/runner/api Added Files: Theories.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: Theories.java --- /** * */ package org.junit.experimental.theories.runner.api; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Assume.AssumptionViolatedException; import org.junit.experimental.theories.javamodel.api.ConcreteFunction; import org.junit.experimental.theories.methods.api.Theory; import org.junit.experimental.theories.runner.TheoryContainerReference; import org.junit.internal.runners.InitializationError; import org.junit.internal.runners.JUnit4ClassRunner; import org.junit.internal.runners.TestClass; import org.junit.internal.runners.TestMethod; @SuppressWarnings("restriction") public class Theories extends JUnit4ClassRunner { public static class TheoryMethod extends TestMethod { private final Method fMethod; private List<AssumptionViolatedException> fInvalidParameters= new ArrayList<AssumptionViolatedException>(); private TheoryMethod(Method method, TestClass testClass) { super(method, testClass); fMethod= method; } @Override public void invoke(Object test) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { TheoryContainerReference container= new TheoryContainerReference( test); ConcreteFunction function= new ConcreteFunction(test, fMethod); int runCount= 0; try { runCount+= container.runWithParameters(this, new ArrayList<Object>(), function.signatures()); } catch (Throwable e) { throw new InvocationTargetException(e); } if (runCount == 0) Assert .fail("Never found parameters that satisfied method. Violated assumptions: " + fInvalidParameters); } public boolean nullsOk() { return fMethod.getAnnotation(Theory.class).nullsAccepted(); } public Method getMethod() { return fMethod; } public void addAssumptionFailure(AssumptionViolatedException e) { fInvalidParameters.add(e); } } @Override protected void validate() throws InitializationError { } public Theories(Class<?> klass) throws InitializationError { super(klass); } @Override protected List<Method> getTestMethods() { List<Method> testMethods= super.getTestMethods(); testMethods.addAll(getTestClass().getAnnotatedMethods(Theory.class)); return testMethods; } @Override protected TestMethod wrapMethod(final Method method) { return new TheoryMethod(method, getTestClass()); } } |
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/runner In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/test/runner Added Files: TheoriesTest.java DataPointMethodTest.java ParameterizedAssertionErrorTest.java TheoryContainerReferenceTest.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: TheoriesTest.java --- package org.junit.experimental.theories.test.runner; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; import static org.junit.Assume.assumeThat; import static org.junit.experimental.results.ResultMatchers.hasSingleFailureContaining; import org.hamcrest.Matcher; import org.junit.Test; import org.junit.experimental.results.PrintableResult; import org.junit.experimental.results.ResultMatchers; import org.junit.experimental.theories.methods.api.TestedOn; import org.junit.experimental.theories.methods.api.Theory; import org.junit.experimental.theories.runner.api.Theories; import org.junit.internal.runners.TestClass; import org.junit.runner.RunWith; @SuppressWarnings("restriction") @RunWith(Theories.class) public class TheoriesTest { public static String SPACE= " "; public static String J= "J"; public static String NULL_STRING= null; public static int ZERO= 0; public static int ONE= 1; public static int THREE= 3; public static int FIVE= 5; public static int INDEPENDENCE = 1776; public static Matcher<Integer> NOT_ZERO= not(0); public static Matcher<Integer> IS_ONE= is(1); @RunWith(Theories.class) public static class HasATheory { public static int ONE= 1; @Theory public void everythingIsZero(int x) { assertThat(x, is(0)); } } @Test public void theoryClassMethodsShowUp() throws Exception { assertThat(new Theories(HasATheory.class).getDescription() .getChildren().size(), is(1)); } @Test public void theoryAnnotationsAreRetained() throws Exception { assertThat(new TestClass(HasATheory.class).getAnnotatedMethods( Theory.class).size(), is(1)); } @Test public void canRunTheories() throws Exception { assertThat(PrintableResult.testResult(HasATheory.class), hasSingleFailureContaining("Expected")); } @RunWith(Theories.class) public static class HasATwoParameterTheory { public static int ONE= 1; @Theory public void everythingIsZero(int x, int y) { assertThat(x, is(y)); } } @Test public void canRunTwoParameterTheories() throws Exception { assertThat(PrintableResult.testResult(HasATwoParameterTheory.class), ResultMatchers.isSuccessful()); } @RunWith(Theories.class) public static class DoesntUseParams { public static int ONE= 1; @Theory public void everythingIsZero(int x, int y) { assertThat(2, is(3)); } } @Test public void reportBadParams() throws Exception { assertThat(PrintableResult.testResult(DoesntUseParams.class), hasSingleFailureContaining("everythingIsZero(1, 1)")); } @RunWith(Theories.class) public static class NullsOK { public static String NULL= null; public static String A= "A"; @Theory public void everythingIsA(String a) { assertThat(a, is("A")); } } @Test public void nullsUsedUnlessProhibited() throws Exception { assertThat(PrintableResult.testResult(NullsOK.class), hasSingleFailureContaining("null")); } @RunWith(Theories.class) public static class ParameterAnnotations { @Theory public void everythingIsOne(@TestedOn(ints= { 1 }) int number) { assertThat(number, is(1)); } } @Test public void testedOnLimitsParameters() throws Exception { assertThat(PrintableResult.testResult(ParameterAnnotations.class), ResultMatchers.isSuccessful()); } @RunWith(Theories.class) public static class HonorExpectedException { @Test(expected= NullPointerException.class) public void shouldThrow() { } } @Test public void honorExpected() throws Exception { assertThat(PrintableResult.testResult(HonorExpectedException.class) .getFailures().size(), is(1)); } @RunWith(Theories.class) public static class HonorTimeout { @Test(timeout = 5) public void shouldStop() throws InterruptedException { while(true) { Thread.sleep(1000); } } } @Test public void honorTimeout() throws Exception { assertThat(PrintableResult.testResult(HonorTimeout.class) .getFailures().size(), is(1)); } @RunWith(Theories.class) public static class AssumptionsFail { public static int DATA= 0; public static Matcher<Integer> MATCHER= null; @Theory public void nonZeroIntsAreFun(int x) { assumeThat(x, MATCHER); } } @Theory public void showFailedAssumptionsWhenNoParametersFound(int data, Matcher<Integer> matcher) throws Exception { assumeThat(data, not(matcher)); AssumptionsFail.DATA= data; AssumptionsFail.MATCHER= matcher; String result= PrintableResult.testResult(AssumptionsFail.class) .toString(); assertThat(result, containsString(matcher.toString())); assertThat(result, containsString("" + data)); } } --- NEW FILE: DataPointMethodTest.java --- package org.junit.experimental.theories.test.runner; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; import java.util.List; import org.hamcrest.Matcher; import org.junit.Test; import org.junit.experimental.theories.matchers.api.Each; import org.junit.experimental.theories.methods.api.DataPoint; import org.junit.experimental.theories.methods.api.Theory; import org.junit.experimental.theories.runner.api.Theories; import org.junit.runner.JUnitCore; import org.junit.runner.RunWith; import org.junit.runner.notification.Failure; public class DataPointMethodTest { @RunWith(Theories.class) public static class HasDataPointMethod { @DataPoint public int oneHundred() { return 100; } @Theory public void allIntsOk(int x) { } } @RunWith(Theories.class) public static class HasUglyDataPointMethod { @DataPoint public int oneHundred() { return 100; } @DataPoint public int oneUglyHundred() { throw new RuntimeException(); } @Theory public void allIntsOk(int x) { } } @Test public void pickUpDataPointMethods() { assertThat(failures(HasDataPointMethod.class), empty()); } @Test public void ignoreExceptionsFromDataPointMethods() { assertThat(failures(HasUglyDataPointMethod.class), empty()); } private List<Failure> failures(Class<?> type) { return JUnitCore.runClasses(type).getFailures(); } private Matcher<Iterable<Failure>> empty() { Matcher<Failure> nullValue= nullValue(); return Each.each(nullValue); } } --- NEW FILE: ParameterizedAssertionErrorTest.java --- package org.junit.experimental.theories.test.runner; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; import static org.junit.Assume.assumeThat; import org.hamcrest.Matchers; import org.junit.experimental.theories.methods.api.Theory; import org.junit.experimental.theories.runner.ParameterizedAssertionError; import org.junit.experimental.theories.runner.api.Theories; import org.junit.runner.RunWith; @RunWith(Theories.class) public class ParameterizedAssertionErrorTest { public static final String METHOD_NAME= "methodName"; public static final NullPointerException NULL_POINTER_EXCEPTION= new NullPointerException(); public static Object[] NO_OBJECTS= new Object[0]; public static ParameterizedAssertionError A= new ParameterizedAssertionError( NULL_POINTER_EXCEPTION, METHOD_NAME); public static ParameterizedAssertionError B= new ParameterizedAssertionError( NULL_POINTER_EXCEPTION, METHOD_NAME); public static ParameterizedAssertionError B2= new ParameterizedAssertionError( NULL_POINTER_EXCEPTION, "methodName2"); @Theory public void equalParameterizedAssertionErrorsHaveSameToString( ParameterizedAssertionError a, ParameterizedAssertionError b) { assumeThat(a, is(b)); assertThat(a.toString(), is(b.toString())); } @Theory public void differentParameterizedAssertionErrorsHaveDifferentToStrings( ParameterizedAssertionError a, ParameterizedAssertionError b) { assumeThat(a, not(b)); assertThat(a.toString(), not(b.toString())); } @Theory public void equalsReturnsTrue(Throwable targetException, String methodName, Object[] params) { assertThat(new ParameterizedAssertionError(targetException, methodName, params), is(new ParameterizedAssertionError(targetException, methodName, params))); } @SuppressWarnings("unchecked") @Theory(nullsAccepted= false) public void buildParameterizedAssertionError(String methodName, String param) { assertThat(new ParameterizedAssertionError(new RuntimeException(), methodName, param).toString(), Matchers .containsString(methodName)); } } --- NEW FILE: TheoryContainerReferenceTest.java --- package org.junit.experimental.theories.test.runner; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasToString; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import java.util.Date; import java.util.List; import org.hamcrest.Matchers; import org.junit.Test; import org.junit.experimental.imposterization.FunctionPointer; import org.junit.experimental.theories.methods.api.DataPoint; import org.junit.experimental.theories.methods.api.ParameterSignature; import org.junit.experimental.theories.methods.api.Theory; import org.junit.experimental.theories.runner.TheoryContainerReference; import org.junit.experimental.theories.runner.api.Theories; import org.junit.runner.RunWith; public class TheoryContainerReferenceTest { private FunctionPointer method = new FunctionPointer(); private final HasDataPointMethod test = new HasDataPointMethod(); @RunWith(Theories.class) public static class HasDataPointMethod { @DataPoint public int oneHundred() { return 100; } public Date notADataPoint() { return new Date(); } @Theory public void allIntsOk(int x) { } @Theory public void onlyStringsOk(String s) { } @Theory public void onlyDatesOk(Date d) { } } @Test public void pickUpDataPointMethods() throws SecurityException, InstantiationException, IllegalAccessException { method.calls(test).allIntsOk(0); assertThat(potentialValues(), hasToString(containsString("100"))); } @Test public void ignoreDataPointMethodsWithWrongTypes() throws SecurityException, InstantiationException, IllegalAccessException { method.calls(test).onlyStringsOk(null); assertThat(potentialValues().toString(), Matchers .not(hasToString(containsString("100")))); } @Test public void ignoreDataPointMethodsWithoutAnnotation() throws SecurityException, InstantiationException, IllegalAccessException { method.calls(test).onlyDatesOk(null); assertThat(potentialValues().size(), is(0)); } private List<?> potentialValues() throws InstantiationException, IllegalAccessException { return new TheoryContainerReference(test) .getPotentialValues(ParameterSignature.signatures( method.getMethod()).get(0)); } } |
From: David S. <ds...@us...> - 2007-07-02 18:11:19
|
Update of /cvsroot/junit/junit/lib In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/lib Added Files: hamcrest-core-1.1.jar Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: hamcrest-core-1.1.jar --- PK rRósJKRt<óõ4y¹x¹ {E.æ'wÏ~¶×]¡éÍ´~WÐdý ~Kà8,Ì4ÝDë\(RÕJïäóVVO"ã-÷¤sNiµÝK±Î5åUq©nK-ŲÖ.¾0 Î/¡ÀÊ}ñ[É¢JØl4ÀKVjÁUB¢L:å:! PYi*ÄFh<ÓUXm£jE.Ó¿ÙRBïãJèÒÀÆhˤi]0IÛZn+ÅÉËJ&6<[Äx©ãHå¬(>v%^ü\.9T²eÁ/Lå §Úû¹âÖ ©-O ?ðvÜ'WPÅÿ©ñEÊØ¹¢¯ÿ T0´|>Bª^*-t9«*Y+.DÊÕßTT>ýÕ' Ð,0a¡\É8ZÖJÜD©¹õVª|ÀwH*z³pU·È¨{êcù'´Ë9î1æÿ>-æQH-Õ÷ïÀõM*ùºk^¦ÜW+³?`^Bù¢¼lÓµ®ý ër¼[Ü$ÄXö$¼ðëc,×e ©¥y]2ÇúÿPK Ê× ¯á¾©á[¾áï¨ø®ï)h-Ù%oLASf § >^µ´MlëxõâåL3eRÒ¼YÎNI|ĸW,¹ vLTÂpѼw,×¾ßt,7ïæ½RÅ>¤ iÎÏ[öìuÅS08o^6˦]ô]84Õ{R.½QLÁ_sÀ93Q}VyÎg¹©µÄe³\¥oÛªPÐê[ÎùܧNÌ·ò^c3éü{ÎK§:Áz?é'áz¦C{-®5o:¦WqXÂñ`·ÔÑ©`[´.æÃÚâ~Ëd©`^Õ!©<:uïFcÖEêoèÓÜT\C9æYp§±¡z ºêG z{Woi(nhè6Ƨêʾ5ËûOT"O|;ãSÇPCØA×òâ=õbmØ#ÏÝÂÞÌZCg-8Ü<ÊÐ¥hXn·KÌZCýü(ØZïFáe¦cs=¶²xf\t¯ò0'lϼÂ^µç*ÎEÓó,jågÞ'+U'o-6Ö±î6tìÅ3Öñ}üúíj¹¬ }=cs>^dòô_Óñ~(αù×+§c?",óæµ½] ub,"q´\1Y¥±£c:~¨ø©áe:Dó±Á\<¦`w$%0l³<|ÄqÌ Õß~®ã>Wñ¯àâãa¯êø~`_}%ÑÜÉ+¬VåBåotü/ëø^SÐÓ û:FpPÇïñÄèÅÙ>1ØbpÄ@{=<"ùð;;nTPÌû¬oܪðúÏܸôD)µäÈàòçÓe£ÊR<?úë>ê¼^´åMWÜ®ZI<ÉpÀ§\.iõ̺Ú_µ[u]6Éïóâú½lO¦îó`MB°7ÊÆ&DÌ¥ «¼û3õ;{g¦î[U¡Ó§¢éo¼¸-§H0·FsÙ²^QºÎ£Ý,RpDHe Çwñ½ A>Å7qæå8̯aÎ ç±åÏ\Äð͸ïv@÷ðQ|3{#>ßGîgÕÈ.#f¼'%¹B)©bϨ«ý8 -³eGe-Yã-4ŰAÝVm«QתkÁ½8$Õâ°¯N)[p]Ïþºàþý+ØldßEbÍKxuÛö¾eh®.£eI°kdh]D·Ñ>*Þ.|Mo ]în®³Û&wån{ÝÜ=À ¥±e]Fº#½5½ítήàtZBç:±ö1ñµ=»çD/:ø_§;Ð;èð.F£a7Á]x{0Í]wã2p1Æ3,(qeñãUÆo Þf¬ßeÿÉ(ÿ9_üõ0ò×ù1Fü*káܼĴ'D¡ÙÁ½]ñ7ѽ»©¦´Ju÷ø¡ºM¬rîç*&Wã\5ÉÕxî RP"å2(ÇHc;`¸6Æ[èUèV×z k´ @ÚB m!¶HÍ~*DP&B ðÇK" í)äl?Ý_ÁܹÊ(©J* ¡¤B()>"(¡|´7É Þ²L@¦ø;Æäï94íOÈæ!Àð&^DßVPÍ/»!âîSñý¥÷þcì]m5>â~~0õM´®1iF¿v²Ë±!ØO£1ßfèÑHèÑHèÑHèÑOmk?SÆobﳡo§¹â'hd³òÝM{éÚ]¯ md{±Ç÷Ù²ôÞ×úlÀYßǰ sß;éNj¡VÎJTÝ!ænrs\X<'õ<Z¾Xî÷×zûìj¾}{ E·ËÇv( ì!çÙ/.h´4ý!~|NFP 8 x#hä¹×$Ï þâ²KCF0)kK^qúÀdt¿l»ôÝrÑm¤3r2Òr¡=ÔCh]póÄsYryxÌòeVÞl¬ 'YOùÓ5ý+âÏÁļ9òRïìÿPK dÎ}¬^OøòF®Ò¨-Ø6Þû,«y6Ï#ã&ü/èjñ¡mæá)DvÞ½QfYkÖS$4¡¯É#°L1ܽ"ay ¼=,Ãyý 4ýEµQÅjOäOkj¶»'>VßÐó¼g4Ú5|¦=>nÆéêï0 ÕloÕ/óÍÆåþ4¾d9}19¾ó +¦?jÅ+[Ô¢¸Å%ðÎÅ%W: gáà_øìZµpsú"ÌÚÛîÐ4ÏvU+|,©Ï þÆ jmFpÍÌ !ÕQ- .´ÃôÀ,Ju;ª¬31 ÿàÈÛü-2f0½à0öÕRÂëÝÐ0mÉ7T³çç£ã¼Ç(-<rC#p7ÁÈÿÿð&Å!Õa4{r_w"\(.3ÏÑmw,¼Æ"Ï3FEW+¤w¬{ eâüû5ÏD»/õÝt,q¯¢¢Wû :áúÒnH8tÇÖc®eÉës¿ñ`dõªÎvpaÐÕzO7TΰçxoÛÉå3iÌí\JËLo{AjS]à À° Ô¾t é+ÇÞÌÅ-Ø+\$ùÒ\i Ê í=×2ß Ì-KSpô×ñLjózæ;/ls79_Ö5ÛoÛÅi.1ÝU3Á×Ô^G1¼~½5# âBG¼Éc]Y[DGr³¨<ÙGî^<MsîfAxÒ=Ö¦Õ9 JqßQC}x§ ÒÈCØ¡Uý´üûËzú ïtL¯Îô¬¤X·X¨{®5Daó$øÏ ·íaÏ}xssÝ£j dôv2w#ÆÅ¡xrO§ÇñôÞx®ìFCÍûÙÅþüPK ûðªy}íK¶8æç0ÐI#ËÂvØaØøkr¢NK3üv.C.G»¾£eÏHO1óaÇ5áÞÁ-ür1±=Dé0ÌÐR&×´;¥Ì(ϼ=ÊIñ¢H0K+`.ÌS^ÂÂÜ ýAmJjiLMI±ÝuN:{EäiBnõ_Î"XÄdyõPK Õ£ùÆ`ØççËRE ×ð6c:0 sðbZb°]ï¨#/(6øê±aοß9k ^ô¥U§sµõQ+MG!_é3½X&V1Í)]m=:8[Á?©CXHU°½Æë ¸FCóz cïÐOß¡im¤ U>1Nó³×b¶ÝÝ [ßyqçË${öIòNѰíGü¢«drRPK ôE-éK:Ø;5¨ôÈéYrë.X[¶áU]Z¹)ÞÎïûFªlØ[©å³ä¥gÕbk .mt½ªÕÓáL+Q¼µuÝc³ZØiØ|hzÅØ5sÁiRqü éhhJ½%Ð|&Bm7°à¹´KtrOokíycßÃÀS`áäµÜåHW;ÅÌ5K~oéÜÉÛ4¬o½U·]-S]ôkN¯ÙÒñcð¹¥÷¢ BªõeË/k¿ ð¨¼tB[ùÒzr¢ª[2ï[üèiüDM2IG?Ø×ñÙ°Hà{>ËÃlFx¬cÛ7xòïà&t?êã9~øIÇ^ù³»g³ #Ç>¿èÈóH:¹·ÈÃOt,aY` òS*pNªChy§r\ðTÃK\pT3\®¨ær ÅXÍÖʳj¦VúUÐÕ!ÕTö¸4( »Le»yêÞñÅÆUôÑÿ(þ]à%û*=¥¨Ôvýñ:m$Ûåv`¬^[˸Bm7_ZÅÎÙºó!ÚS§½ÁùLÈù*®Qûzhä jßô·|ËÇ(°í2¶?MbTÂ&1VÇûØ ¶CÆ^a¯cRÂ^§Laß&ì2 2v4f¦Iè±310Ä&dl:iÂÎHØÊܱwcåö)¶[ÆæBØ[xWÂÞÂ{uìmRK%IÕdìÍ4a߯cgIíRíi»SíR.cÄRÛÍ%X}EÆn°Ù¦nUô »$E¡>ÀvA7|°uvTl&Ö*K$§¾û(ÉNì´þâ8Ù°KZØ$ÅÿO"©äê þC ;LÁêÒ$ÈFOù AËx´îíhT)H$·î´ÁOÜ%¿F#«úxö-p¥@ex J¨ÐsX`Æ×BX¸ú)¼¡Õlä4Ùb9¹ÖüYP>V¬)Ñ`?qÅòBãæwcZ-^þ(¹ë±ÍQÊÍd×ö5[aÇûæÑþ>+ñÖqG®ç7-:¬RèS®WyüwBÀ(®§QÕDèÍ,£(µõ[2~ngÂÒ:ÀÁfÚ¸ð*tiH*O«´´¥ M?'>Ä:)tSkÁ=ÖÖ\ØJ´=PJðórü s¼ó' sÝQ#Ä]iÊMà=óh¯ûÎ×I®Vìóâ;&.ðÛ=:®ooÀm¾<éK3µ¦Ôm õoìK÷Ô«Õ¸G¾ÓÊíNÊ´½)ÚÄ ` 9rÿ]jYJRaüw§pË {-þ¡påò$ỳÿj$2JÓ(ø*\+ÕÁ ªdèö¾ØóÞ»©kPÇŬïVñ*BòT)å [5ù}ñAúÆ{¿HÃãÔÎEw·úpÆ{2¡¬ÝpÒÚÝ»åtdgcÞLâTìÍXä¿^ø_{hò ë|دJAÓWI#RwñfJ8Xr!í¡UÃtjÿ·G]vFÈë¦ö/ôþþvèðè~¿Ë53j%°]¨ ZQ|ýPK TÞã%Þ5[X)` EYSîT×|ëRð8«@2G_YA¡ÔÊ8QÍSácتܷJ^ö´=Æ^åRpÑ#t0°ñVÈåeÓ««Z2QÃoç»»ÖÓ¶f6]jV³dTL!÷5Io§UÿHÞnÆRTRÿFN[øbr Á°·ëLä8ð^¶J·ÅL.3?]+7¶èÃW&ü¹»Z¤°Î÷¦.°W?d§Äß«½$KiÜ h*âl2Ó%qIÜIÕ´w'eÝ!,ëûuf-ÇVwèM¤$¥RÖ÷ Xx@í0´CàéÆA¯y Ò=ézÝlnËíWü$ÃóVþGý~fgͨ·/Í}½þÛ¢ÁØÒU ¨1î læbÇw4ÂqOÒñ0»·Á&éÈëIâæ'ØfÁ .9^Úá¤ÆúÀ*üØfò^yþ ÍÁðÐMMnUX9&<ÞÎnö;îö©qåòd¡JíØ$åâõ½vfnl>"ôÒjå4?"öwÛÂÙ/ëN#þí \üSÒ&qña¡ bbË Sï.z5~PK /k´`¶ôRbçEÞ lEÓ£Kϰè è¤U9ò§*µE(ΡFMP Õ8Ën±âï}Dk»[Ô^xe´W¾)`¯¾=l P¥ov/aàkJ@i¶|pï´ó(9ïÄßuÁKð¼n~OÂááÔ=Uà¼ÒlssFj%kTÓ ·r8ǧTkô¿vÏ¡w²u<#séÝ1X¾6Óɸ16áö|0âÙÊqò»`¨õ#UNºÂj¥+7y¾è5%P\ÌáâGÝ"qkCrûiÒõyCYu,7+sðH&º=E ð$@O°)?3øÌ(æB£#KâJتþXn ])írÁ£4nÇöÐHÊ4«H.çá!ÿE ¦gU¨ÑRþ~×!lÒB¹£Is3gÞ)¢'Mæ!cÙ^{Õ-¢Ëôä$b2/¡ÁÁG_ÅVĤÜ4 ;ÏYA³Uî?",©Fêͪ±Ü`? CH\w$_Ìe6#Qc¿ê@ àA âÈûÚ"5 ¥4®¼í©gÃTùZ¬(ÆáÚAQõã¾R4.nL_çùÆ¡a~¾¹1 RË'£¼¡¨éÕÃ1ÜÌ¥UdQú§¾Vº jYK"óåf:*/-º"ptÓèôÓlYºwnìu«45`÷ÖÈ9ä=19Ý¡µ°|ì1&Bó £¶5ÖÁ_Ù¹?éKGñM;Ô»ô¿(ÜU@Ví³c±Ù!0˲CiÙXZvMâ}òPK fÇqÏÊÃSa=à9^H°Â¢n, ×K ¯|m1$Jûʱ¯)ú^~ùðë¥\ãÁ%M×,Îl3øF 3ÄJÎßÛennDþ¡*µmÅÔľåô[UÎ*æ^¾ª¨&¯[ùMËÔô½U^WMíÐÒhÓÞgÈ2% ô5(^Ûm)¾q4K:p¬Ôl3vc)Ñ(õKzGº 8ÓÿR!ÍÈ¿ÝXû¤ò˳ùê)ä¡Í.:Õ*}ExÚóò¦a*_×DOÿ´oJ0]¯\±µZ QÄ1(dý`¿ù6¢x7£EN,cV¢¸8àqB+æ¶niÜL »VIé:15§*nª8VôÃhª¥Î]¹y.߯.ÃümóÐí¹Þ+Õå}®Ò+{Í Ã´ûÒUÅÜäG6×UÞ1pÏ&ë1'.ÏVÕ4NÚ>LSà {ô~ûèÍÓüË#K".Öíà#f/ÀvèjÀwJû.Ñ*ÓbпãXN.1â`ÒL´pÖ)SäÊÙüÙÜ7®PzÁ^I@J4³[HÂêÅi^Zó#øb4){ÐÂ_ÚÀA'<êÃ8îÒ?T&Od¿C¾^<á*P·D±j¢U|D;¡>ý@î.|üØ»tïô÷L6ûuêGèÑt 4ùräͪ,sÒ¡J\"ðÐiA²Ý$á1a ú´}ò½ÿO?M¾Yòn(æn¥ÏLÑ*z¶-úVëBÞ£õ®î ÚS1éd=ùPK 7¦'¼ ßûÈzÄvòo¯c;Vð,©¶%;IÈ9ÕëUÞK{î£hÀ¤/Rxöpa±ÐâÜÈ7üb¤öTfW°íxM¤ ä³Hcç¡1oR[åó-õ¸ÞeÃÛC¼}ýó^ÄåAyúõù~C<éA/é=««>í\ ·ó¥zúÌP®ô °%ø'çöI,àóuɧ8&á*ÈÆ? ø ,&üe JXHò:=a£ûØìùÍÊÈ Ø%#xƺõ¡ï[{!ßgÂå,0÷<rê¶éõ\«kv`¾7^ Î|˱,JÛ' 3éÆ9CM Q~N%-ËéÒK>r¹Óê\-ÁR [2ã~ÏÞíÛ¾µonYÅN/Û¶ã2Eo¤O«F8¤ÓBòMNKËL¡ý?nÚssYLÆûÜ0<ó?uÓé»=sÕ¢ãPa4F[ÃЬiXÇ;>Å] èðª&±Ñð Îñ¾9©çW.+ >Ó° { >×p4,à ÞaÀS3iÄÆÊòºê£ä+Í X®$>ªåîÞºùDçÀfí`3y$>v3i³Á¦½Ý¶<º?nó¦ïZöNó?jÒnX| 'NrZv]ã8ox!KÑÒPm¤Yçù]àç ]§|»&ã=áz.eRþQýÌÜaÏqJÐ/K¯"}f¹ q/Á*>;Î&#ä³\ñ:ñ)q¿¥&KY¯þÌÆÖøs\ä~G~ýJíJº\öÉwÿ9ö$â6Å<ÀÕ<Y]&b Peäyh¬ÁZ«|¾·zÄ»Kxmwh9ȸ>È@ ̸!ß/'#è5½ u5¤]ÊáÞI½ÔÀâ<³¾0T+=ÂÔɬ6ÀÔ(Ã3ô5¹_a´ÂyV¨> ö/|ÅÏúJ;ô/«N9Ó4®É¿Î¿¡ß5Ê¢ÕÊ-Ji_üã÷ÙûSÏÂ\)M)=y3hñV ßþPK .¨iÆÆ^<¤'(ÅV`»ä0C}l¢áö¶üdéÕê&vYl×ÊZ²a5Ûý_½oÇfjÁµãê¯Ì³öý8q26j¥VئjªÄyMÓ-×È<6xK²béÆS2 Î)ewü1ÞioìGíoÈ&kÊê5CaK*ghO'¹3 oâº!KÁkô4IÈCpc" &0)áÞÁ¸Æ#E %¨¶ñXDYB]BO$0EXjØð9v%<Åc _ð¥JxôÄápÎ/.Ķ.M\}Kø_ l¥¥¬kZ4÷âzÔ«3Ú¼?®4³a¡$Yö¤Æ4 ÍÆO`ò1HGªV°H#Ùa:d'f©§v¹YËî¾?ÉĽÞíÁvCGÝ«U¦r4W&=?ib;^«òÅ;ðófQ_°*&#±å!:ÇßÔ&ÿhAå=@-ïãì,3hèáSôJÕfóg~í~YÅQú5pÂÓ.Â9"%í}xd¢=í9ãéÛAwDHº»@Ò3úømâDr¾Äøü: cÏéÖ·hí'[¾0.z"òé4áxAqÀÞñÁÞq<>{ÇøI{ñ¹úIW°ú\ÔãdICJ+ÇxN¸v8ñüÉ}>üÐ N0a@ÝÏK@K¸´´OõÄÑ®@bÑ¡àõÉþ4?e´¸TJÖPIRñj* âòRZ&+cñPßCûHûÍ« â¾\¨k÷EB Ò ÜênTY"ÌïL!~-Lª£tb¶UOt2ÖD¹AIDPæ(ãQÆ©Qî4PÀ;»¾½÷PK jôzµ¨¼lV/.®Qþ¦ó!kÿÿiº¢!ýéλҪD¾V3Ó·ø8Vì àc¸Û øü(Ĭã$vÚ´¼ìgç;v<ö¿?XÀ©H`^E ù4E»(ý$EÎ'ñ¡ëH¸cV=Ó¶úöNø'/s«?ðÓ*-3$VLËôVbl!¾a =ÓûµJQ8:/ Û/¸cÊç ÷MarÏvJùc^1ázyÃvD~×]³NéØO« Ù++º¾¼JðÁÌEçÒl²Â=ãX¸mo'Âð³½vpÄ Ö;S:ULd¢66[]óuF;3¤xàa8V¾ñý9T>0K÷j]zqEuÑÓjp£ #ïjgVDÁtMêÝeÙ\¿¿aä7<Û9%Pî²Îuòøº¯ÿ¥h8QG²aÜF»ngå¸G#ÁÐ{!¯Ök¨ì^ï6Tµã¥Ë¹¢uî6z`×Clr{Z;/¹h4ÖöõÝým ]¦! 5% Ïðaüªñ§êd ýh3ü«¼ZÖ.>{ó׿¾ð<c~)úÃÐw#R¤Óz¶¡PDÙ\;òºiUé ·õe3 ûd3<2iªd#*JÍaÎßþPK miEro´ås×GrÂJÃR«ådÀWdQv~BÁÚ¶ÓÎèèEYx°}o®ë#¶,qcÐ%]±mhu¯iª¦¨¥ 0,oqñlsû=ÿrsûy6_vK©Ï»<-|ðþÏóÒ Ö5¡xsñ·â Ïõ¸jÏâ¦J´,6å:©~ çÈ¢1ãÜS? NF§qX ä>ð$õ 2°n¼XwXÓ!:ëöõ0Ncäý$©S2 (:Hü:Ö-îÇüöùnÛ¦ö;ùG%+z$¸FÉêíOýï »ÈÃëÉ÷+àÖHµ%KJ¼DËx}×ãîmàÑ_·FgóëpçC\èör?D è<¹ËJ¾ãÓ¡þlÝáwÇ{Èô§áø®%ddY@Îaß@.#â#ã%ÌÈ˼Ø\AÚÀUaùÄ@ |GñÏÅ/¨ª DçL Jä$!«×¹].°jÊXüÿëàxo8=yýÔñmË¿ª3¨D«p¿©°4¥þªÞ[è÷SüVyD|.Ý!0ÖcÍ9Ä}ÀÆé{Hqc´ÒhM}E´+Ò¡Y7bf~EägÚE¤qfPd"5²\ ]²)\äê¡Ò§ªË7úRä{Ö¼F«YÊG¼û¯fþHæÑvB@ðm:-¤ÓðzHgÈ8- SðæðB õD6%)ùhCjKR)ªc2hç¶yubeÊúuñÎLî$K<`ÓB¶§Ù×Ln2ÄM¸WBÜ ·L³È6nÂ8Å+½U¬IÌæ ÇéÿCó,ãmbi¶#ÚÜï}D¯eì§Ånw ß:äåâà_23HpæèïEXqIܪ" üdxD¶N/*×:Ô)Ü©"`Þ:gÞuè¤X*%IØx&®«±n*v«%Y±*X¥yX_Öâdþæ¸Pq0µÙKæ%u绺ÔQºAÆ2hhé5-»µÝµø buó9ÈðøHþæ-ÄÒøÙY ÒZQ;¼X%ÏXÁwyuRÛ-gLU$qIü ¯ðPå]?ùpÃ÷\±µG}ÝåõcÉ>¨¦bÕ¸r+ð':s¶ûÂUKÔ^*QÓÔú¢NIn bÇgMw3\3±º¾gZÅKÿ3§'®lÅ9aÝůÍÁÞ ÍðüäyO¬ZîLßpúMÃS²&ve(i/<ÏW\ÓÍ;Ö¹«üàº/y(ÎîâlûÀëR_i´ó:?aÜKÀAÜÂý`þî¥×ò÷R&ðx§sgÿ%qaê4Ñ´>ÖHÏþôMÚ0½õkux½.¼Òø¤h!ØVôʽgè¾¼Uj×ôÛJgúkq ©M~H½ ²"BtôóäyG2BÒÉ~Ëæ¾!rHV£ô& LRÅaMlfãÆ£5Ñ'HOlzÚý¤MR=3ݵºÙÙ¯äýlt³S|©£Ýn¢ÏPá"e4¡6[PÉÜXìÎE !0`ô·m\Çd¥à|v²Ä,æÓÆeÊìW$5û¬÷´Á/í4ifTs^v'9Ñå2&1«ºkÆnz¯ã7ÿPK ³ã;U_¶¸ AOï3Nùä©úÚôbÐbPaÏ«K%Ãl [FP¯Á[^ø¨mvÛ7¬A\ð yÜ¡ûÈC±n¨c5bÃz\w*§Z|Zz5i"®ïo0!û!rÔZëø¢º¨´+F¥u9¤%?Ø>!U*)béôY«¢kÚë"³ætßó1Ùq ưölâîÆIw«Ôq¼<±<ÿ «9¿Ì;Yö_Ù^É¡E6öÅÐóìZ^¦%_¹nm«.Ýt¬Kô?ÄPK ãBxÆ#<f¯e+EHxU¶Zæ Ô«|¨ÆòYM*õ²©6Ô+ÇO)bA«êÕ2USIb1¥ÌÁ¦kVC4æÝlqCpÓ¨P§¡¼¦«;zI5J©Fá¼QVj{©±½ëZZöö+¦zÙÜ1¬´M¼»î¤q^;ëWtÎwÖ¦f\]uÀh,¤+©¢WS»¥#µl¥ßr(fQ¿ä UÔfÙÔJjÑà0Ó³c K3t)\é88Lú'¤nX~û]ãN¦¸vföR .½íèëniuuOkj¤÷ºN¼Æ±ya¶²e'T÷ÒÑòÀ±RkÑEÃÏ(x9ÑeïÂÞ ¥©öÕI£eÕm dONµq 2®x&cS4§tø9YÏñBÆ:68û«¿.`SF2naÃ:} È× ûërÝC$)ªWêg\: ,SÓ«ýªõNYÄ©îrîpXíZ;pRJÿíõcë}K©Ñ¦2[4pþLaúÑ7Å&{v<0@kÒÖÃä)åÉJñàâïà¿Ò.½¯ei'b`ÌÉÆ(`¯îã=±vl¨¥]±ÍØwq#ñoàgðø!ø ÁÀç6AJµî ©%Ù B4êFaÅ6J¼ w½ ܳíýPK ÈæÚ¡¯¹®Uû `k[Úf§ÄíàËÚ'ß5l߬%Ó3©];¶íø\ðF#÷¹î;î)©:l ÌE»¶kqÏ+$*|ÃPGHó]j<H¨¬;þúz7ºsµÇ¼âS«û¦¸RæýY<*d¨.10ë*6ðftçTLcFÆ3ÏñBÅfâàHòøÑ^ôþ(¼^7ìf|öV¢Í8ò]Ó®ÆÑ~ÁÆ» t*m;M®L,"ѯ@<2h *}íed{ÏÁ¾Ñ&´öÎô` 9Ån|,®\±c"d×(ªÉ>út ï[àdMÈ0©®úÅÈEd¢¾>£ç,PÐR?YZS¸¹Ð70,\1Ì8józ/ Ç î%LãNHð2Dg±æ-G"á.±E"<÷É63<èØ%C_<ÃúgH ÞÈ6÷PK ¹´q§Å¼ÀÈßT÷CÛÄäüÉóU.â,QGÝérʾPK +`Û?äxµËNõuè{ 5ìÃ'²¦I\Ívì Î0_:Xo2(ÏÝ6eÏîÛx5èµgòVWH×âÝ&÷liÇN%8°}â¾ëuª¼gyªëêßà=AiàQÿ¼:U£^ë²Û)²+µÇë@øú~Oãq¯Ã · oyvK.ÃJ)M°Æúí:aÑ|ûÔqfd2áSW{pÇ¢ÎËãHã_ {ݮϦ×ÃÑÆbN¦_z3p»'¶oÓÂ:pÙ.5ÜåVàzGÚÏNÆ}1B¦7Üg][^&aCÖ1PÀ¦y)¹ûà¡-l3°uÅIèÙÑxW·X´|ê÷ûÂiâ#}æÉÍ7Ïv:£[L_.¡¼;#ðñK±F?F?$}þr$ ²2B:Fú9ò´HfHêå`åÊd¾Åyz$AB54\ X²ÉºZT}>[ÆfÌH[Ľ×yòwd>AU>CÉ~rç(OV<å,9(90¯s2,ãrÌйì1$Ñ1¦2Ë öÛÓIõ(º[N0E¬àJ±3jXÅUª"_1í7Ôw´Ïé¯#ãÜG´pqHÔÂu!^׮Ÿë¡yoP )oýPK ¨× Cõùo¦ ²nBÎz^((¯kkn¯&üBVùëÁ¨Øúóõàªb]×Ò!<ààýÒ-à ín_I1` @g3×ä0RQ¬§£ `rpb¨T¾-ÇÌeúߣòã~¥Ñ7PK ÆõWÆD91Ü7Ñ Ií2Ç=LxÃ#Ý40cà±']\Jþ!YÚá»<ïrÏίlî²c°Ê ) §ÞØc`Eè¼ã9j¡/Ó¹#»ÆYò·C¢äxb¹QÝò ßt Î๻ƥ£×-cDU:ÃXÉv¾Â«e)ê*ïxJH»ù.®H®|I^_{!ÉnÐv/Xôf²¢êï *¯:¶ÇUCe¶3¾ii(ÇÍÿÍ8ßµH\sÕoȲxíǺPãÞ`¡ÃRèµðÏ<·0!3\Ñu ÍÝ´URøÕ^YÔã{$ºç«4÷ÒÁÅhÔ kH·°E/ðaüõÖ«7j5_*±µRÓeæo¸Ì=lv¨ÖÓÛÒ¯&aýù®¶«A§ï!fµäò:]lêÂÍF0Ñf¢uê f)újUIdz¾8³J±íRö|kGÒg«Ê?ºÚ6L1$Ú%Þâ%az: ÐBR«O.¤/æÙûÐOã HÀäx {æ@Ù=à Â8,$ßcq)£G¦*(î¦oQ)R(7é2-e¾a{CGØhM5ê5×}LþzÔyeM±06Mb/Ê!ó¨TNLo!Ù%üxpg¦ kнÓÉÉÉ÷læ=¦cbÎ72µotǼòÎ'¬«8Éîgðå²ük°jLèÌù-áø¾¿öÛ.V ¸iB¢e$1(Om;¯gÌÇüPK ¥@[ $kåÒSÔb¥çµ³Ef9? àÀàG!fí4RqØÝ·ïÍÌÎÃãÝ=#ìY(à}ylð&¶LløÈP8çÁP0,¶Nù9w®zÎoïTøñWb[ör®KW ©dÜdX©N?Øï0ä¿ ]BÏ·¤¿g\î@èó Ã#©ï#g>>z+zÎ ?ó#1©b)8m?T½ÎrXÍ2]ôÿ²¾¦AÕ4u=U:è¼n nȰQÍ2¥û±U.u'µÙ` ÷Ët§Ó®,I6eâ±Úá0òÅO©<SÑf´QÂ'&æL|¶±]ý7 aáß´ÖÿMEU÷£2«Ô*ÞïÕñ<75³ÛmÙèhº,²Ei-bMö5y<²Y«vV«_ø¤[eÚËd=þí%ÌÓm5Ecoä²/fbKã5V^¦Ó aX¢ÛéÚõÚ[äü([I¬hNTí±ª·¨Tm²il)ÑIÕÞa-±ëOPK Æàè¾Ptî°4õdâ&K9Ï#F Æu¤ÜÄä$ú ·ØÃ±Vì8ÈM [E-7Ð$U¶È~ÞåÏÁ,Ñ92Mº!]ð[2/PK Ù%zC rHGüetÈ*dµê Xuç/´J` ¾Kd)C¯+K<EZMvc<Þ^äÖ§¹Ü´òy¤'}eÝC²,¨ûÊ$>Më¦L.¨§Ov õJ¬Â¤Æ!ó¹Â/$_M¸)¤?Ï¡WfÐ º0EÓèçÑvUÿ2iÁØ%hý<-çä_rBnªúæÛTgp©.¶©únãF`oþPK E5ìÄ£[U÷C LhFeg^rä/+й÷-E+ܰoóÑ06-X1BдøÖû d¡£¼F¸¬Kd?ä*Á5Nº¸:çÓÑTýOi}Ë?Í §Ñ£Öð\ø7-MÐCñ¾µ¾öé(~ËÅ¢züXðT¾îý+£[&ònG üE}HT¸grIôXýPK |
From: David S. <ds...@us...> - 2007-07-02 18:11:15
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/matchers In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/test/matchers Added Files: EachTest.java MatcherCharacterization.java StackTraceTest.java ClassNamedMatcherTest.java CamelCaseNameTest.java MethodNamedMatcherTest.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: EachTest.java --- package org.junit.experimental.theories.test.matchers; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import org.hamcrest.Matchers; import org.junit.Test; import org.junit.experimental.theories.matchers.api.Each; public class EachTest { @Test public void eachDescription() { assertThat(Each.each(Matchers.is("a")).toString(), is("each is \"a\"")); } } --- NEW FILE: MatcherCharacterization.java --- package org.junit.experimental.theories.test.matchers; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; public class MatcherCharacterization { @Test public void findCamelCase() { Pattern pattern= Pattern.compile("([A-Z]?[a-z]*)"); String methodName= "hasAFreezer"; Matcher matcher= pattern.matcher(methodName); assertThat(matcher.find(), is(true)); } } --- NEW FILE: StackTraceTest.java --- package org.junit.experimental.theories.test.matchers; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasToString; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import org.junit.Test; import org.junit.experimental.theories.matchers.api.StackTrace; public class StackTraceTest { private static class ThingWithStackTrace { private StackTrace stackTrace; private ThingWithStackTrace() { stackTrace = StackTrace.create(); } } private ThingWithStackTrace newThing() { return new ThingWithStackTrace(); } @Test public void factoryMethodName() { assertThat(newThing().stackTrace.factoryMethodName(), is("newThing")); } @Test public void characterizeStackTrace() { StackTraceElement[] stackTrace = newThing().stackTrace.getElements(); String methodNames = ""; for (StackTraceElement element : stackTrace) { methodNames += element.getMethodName() + ":"; } assertThat(methodNames, hasToString(containsString(":<init>:"))); } } --- NEW FILE: ClassNamedMatcherTest.java --- /** * */ package org.junit.experimental.theories.test.matchers; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import org.junit.Test; import org.junit.experimental.theories.matchers.api.ClassNamedMatcher; public class ClassNamedMatcherTest { public static class NothingMuch extends ClassNamedMatcher<Object> { public boolean matches(Object item) { return false; } } @Test public void classNamedMatcherWorks() { assertThat(new NothingMuch().toString(), is("nothing much")); } public static class NothingMuchMore extends ClassNamedMatcher<Object> { public boolean matches(Object item) { return false; } } @Test public void classNamedMatcherWorksTriangulation() { assertThat(new NothingMuchMore().toString(), is("nothing much more")); } } --- NEW FILE: CamelCaseNameTest.java --- package org.junit.experimental.theories.test.matchers; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import org.junit.Test; import org.junit.experimental.theories.matchers.api.CamelCaseName; public class CamelCaseNameTest { @Test public void basicParsing() { assertThat(new CamelCaseName("hasAFreezer").asNaturalLanguage(), is("has a freezer")); } } --- NEW FILE: MethodNamedMatcherTest.java --- package org.junit.experimental.theories.test.matchers; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; import org.hamcrest.Matcher; import org.junit.Test; import org.junit.experimental.theories.matchers.api.MethodNamedMatcher; import org.junit.experimental.theories.matchers.api.StackTrace; public class MethodNamedMatcherTest { @Test public void noFactoryNameIfNoConstructor() { assertThat(StackTrace.create().factoryMethodName(), nullValue()); } @Test public void requirementDescriptionIsBasedOnMethodName() { assertThat(hasAFrooble().toString(), is("has a frooble")); } private Matcher<Object> hasAFrooble() { return new MethodNamedMatcher<Object>() { public boolean matches(Object value) { return false; } }; } @Test public void requirementDescriptionIsBasedOnMethodNameTriangulation() { assertThat(hasAWidget().toString(), is("has a widget")); } private Matcher<Object> hasAWidget() { return new MethodNamedMatcher<Object>() { public boolean matches(Object value) { return false; } }; } @Test public void requirementDescriptionIsBasedOnMethodNameMoreTriangulation() { assertThat(doesNotAtAllExist().toString(), is("does not at all exist")); } private Matcher<Object> doesNotAtAllExist() { return new MethodNamedMatcher<Object>() { public boolean matches(Object value) { return false; } }; } } |
From: David S. <ds...@us...> - 2007-07-02 18:11:11
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/javamodel/api In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/javamodel/api Added Files: ConcreteFunction.java Function.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: ConcreteFunction.java --- /** * */ package org.junit.experimental.theories.javamodel.api; import java.lang.reflect.Method; public class ConcreteFunction extends Function { protected final Object target; protected final Method method; public ConcreteFunction(Object target, Method method) { this.target = target; this.method = method; } @Override public Object getTarget() { return target; } @Override public Method getMethod() { return method; } @Override public boolean equals(Object obj) { Function function = (Function) obj; return targetIs(function.getTarget()) && method.equals(function.getMethod()); } private boolean targetIs(Object otherTarget) { if (target == null) return otherTarget == null; return target.equals(otherTarget); } @Override public String toString() { return String.format("%s.%s", target, method); } } --- NEW FILE: Function.java --- package org.junit.experimental.theories.javamodel.api; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import org.junit.experimental.theories.methods.api.ParameterSignature; public abstract class Function { public abstract Method getMethod(); public abstract Object getTarget(); public Object invoke(Object... paramArray) throws Throwable { getMethod().setAccessible(true); Object[] modParams = modifyParameters(paramArray); if (modParams.length != parameterTypes().length) throw new IllegalArgumentException(String.format( "Wrong number of parameters, passing %s to %s", Arrays .asList(modParams), getMethod())); try { return getMethod().invoke(getTarget(), modParams); } catch (InvocationTargetException e) { throw e.getTargetException(); } } public Throwable exceptionThrown(Object... paramArray) { try { invoke(paramArray); } catch(Throwable t) { return t; } return null; } protected Object[] modifyParameters(Object... paramArray) { return paramArray; } public Type[] parameterTypes() { return getMethod().getGenericParameterTypes(); } public Object[] emptyParameterArray() { return new Object[parameterTypes().length]; } public Function curryWith(final Object[] curriedParameters) { return new Function() { @Override public Method getMethod() { return Function.this.getMethod(); } @Override public Object getTarget() { return Function.this.getTarget(); } @Override protected Object[] modifyParameters(Object... paramArray) { ArrayList<Object> list = new ArrayList<Object>(); list.addAll(Arrays.asList(curriedParameters)); list.addAll(Arrays.asList(paramArray)); return list.toArray(); } }; } public ArrayList<ParameterSignature> signatures() { return ParameterSignature.signatures(getMethod()); } } |
From: David S. <ds...@us...> - 2007-07-02 18:11:08
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/imposterization In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/imposterization Added Files: FunctionPointer.java ThrownMatcher.java PopperImposterizer.java AssumePassing.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: FunctionPointer.java --- package org.junit.experimental.imposterization; import java.lang.reflect.Method; import org.jmock.api.Invocation; import org.jmock.api.Invokable; import org.junit.experimental.theories.javamodel.api.Function; public class FunctionPointer extends Function { public static FunctionPointer pointer() { return new FunctionPointer(); } private Method method; private Object target; @SuppressWarnings("unchecked") public <T> T calls(T target) { this.target = target; Invokable invokable = new Invokable() { public Object invoke(Invocation invocation) throws Throwable { Method invokedMethod = invocation.getInvokedMethod(); if (!invokedMethod.getName().equals("finalize")) method = invokedMethod; return null; } }; return (T) new PopperImposterizer(invokable).imposterize(target.getClass()); } @Override public Method getMethod() { return method; } @Override public Object getTarget() { return target; } } --- NEW FILE: ThrownMatcher.java --- /** * */ package org.junit.experimental.imposterization; import org.hamcrest.Matcher; import org.hamcrest.Matchers; import org.jmock.api.Invocation; import org.jmock.api.Invokable; import org.junit.Assert; public class ThrownMatcher { public static class IncorrectThrownException extends RuntimeException { public IncorrectThrownException(Matcher<?> matcher, Throwable thrown) { super("Expected: " + matcher.toString(), thrown); } private static final long serialVersionUID = 1L; } private final Matcher<?> matcher; private ThrownMatcher(final Matcher<?> matcher) { this.matcher = matcher; } @SuppressWarnings("unchecked") public <T> T when(final T target) { return (T) createWhenObject(target); } private <T> Object createWhenObject(final T target) { return new PopperImposterizer(new Invokable() { public Object invoke(Invocation invocation) throws Throwable { try { invocation.applyTo(target); } catch (Throwable thrown) { if (!matcher.matches(thrown)) { throw new IncorrectThrownException(matcher, thrown); } return null; } Assert.assertThat(null, matcher); return null; } }).imposterize(target.getClass()); } public static ThrownMatcher assertReturnsNormally() { return assertThrownException(Matchers.is(((Object) null))); } public static ThrownMatcher assertThrownException(Matcher<?> theMatcher) { return new ThrownMatcher(theMatcher); } } --- NEW FILE: PopperImposterizer.java --- /** * */ package org.junit.experimental.imposterization; import org.jmock.api.Imposteriser; import org.jmock.api.Invokable; import org.jmock.lib.legacy.ClassImposteriser; public class PopperImposterizer { private final Invokable invokable; public PopperImposterizer(Invokable invokable) { this.invokable = invokable; } @SuppressWarnings("unchecked") public <T> T imposterize(Class<T> type) { Imposteriser imposterizer = ClassImposteriser.INSTANCE; if (type.getName().contains("EnhancerByCGLIB")) { return (T) imposterizer.imposterise(invokable, type.getSuperclass(), type.getInterfaces()); } else { return imposterizer.imposterise(invokable, type); } } } --- NEW FILE: AssumePassing.java --- /** * */ package org.junit.experimental.imposterization; import static org.hamcrest.CoreMatchers.nullValue; import org.jmock.api.Invocation; import org.jmock.api.Invokable; import org.junit.Assume.AssumptionViolatedException; public class AssumePassing { /** * This will stay here forever, but dependencies do not add long-term value. * The compile error will remind you to remove references when done with * dependency */ @Deprecated public static <T> T assumePasses(final Class<T> type) { return new PopperImposterizer(new Invokable() { public Object invoke(Invocation invocation) throws Throwable { try { invocation.applyTo(type.newInstance()); } catch (AssumptionViolatedException e) { return null; } catch (Throwable thrown) { throw new AssumptionViolatedException(thrown, nullValue()); } return null; } }).imposterize(type); } } |
From: David S. <ds...@us...> - 2007-07-02 18:11:08
|
Update of /cvsroot/junit/junit/testlib In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/testlib Added Files: jmock-2.2.0-RC1.jar hamcrest-library-SNAPSHOT.jar objenesis-1.0.jar cglib-nodep-2.2_beta1.jar Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: jmock-2.2.0-RC1.jar --- PK Ant-Version: Apache Ant 1.7.0 Created-By: 1.5.0_08-b03 (Sun Microsystems Inc.) PK [...3678 lines suppressed...] --- NEW FILE: hamcrest-library-SNAPSHOT.jar --- PK Á¥y ¾ÉEùÅÅ%©¹Å yÉz¼\¼\ {E.æ'wÏ~¶×]¡éÍ´~WÐdý ~Kà8,Ì4ÝDë\(RÕJïäóVVO"ã-÷¤sNiµÝK±Î5åUq©nK-ŲÖ.¾0 Î/¡ÀÊ}ñ[É¢JØl4ÀKVjÁUB¢L:å:! PYi*ÄFh<ÓUXm£jE.Ó¿ÙRBïãJèÒÀÆhˤi]0IÛZn+ÅÉËJ&6<[Äx©ãHå¬(>v%^ü\.9T²eÁ/Lå §Úû¹âÖ ©-O ?ðvÜ'WPÅÿ©ñEÊØ¹¢¯ÿ T0´|>Bª^*-t9«*Y+.DÊÕßTT>ýÕ' Ð,0a¡\É8ZÖJÜD©¹õVª|ÀwH*z³pU·È¨{êcù'´Ë9î1æÿ>-æQH-Õ÷ïÀõM*ùºk^¦ÜW+³?`^Bù¢¼lÓµ®ý ër¼[Ü$ÄXö$¼ðëc,×e ©¥y]2ÇúÿPK üþ«À+ð? c ÅF+¬QX1K)¬U°t UaãÙ Md6M!15Ŧ¥ØtÅÕY#ë¬e0º¬¼AQÙ¥3Ø5ôæþÞNÝjÓ:sX2¥ÉÌh¹vÍÊÒ¯°ÈéÉÚf4VwºGëÍXºí¤7hN¦G·ì*£¨zE´¾ª\^Ì Õë¾2(jR6g°/oÒiê¶¶ªµØmlk¶ÛÐ~[6W·iÚ®íÔÒ9ÍèN·tn×3NÕZ¹±.@nq^QVãZ®ûµ Îa VÆR4¤6§Ùv´EúÁä¦eÕD_W@§ò$öÓøÓÁiÖwôk¹6ßÌ>ÝÒ.JÖ°ÍÈè-ÛÐGZ.GÏtYGÂ*ñ"3¢/yòêJÏ#üÛ-~f}×àà 1h£1MÖÁ*IquQ¤Z ÷Ĭø!ÑA4ÕÖzõo6q1¹B¬ÇmÃèf0³,rä«#¬M°[µD;w\ng¬l5ð:ôz2¨Ùg±ZümÇèÏáfż±ß<ü׳¢SïªÁ`m åöw$Økù^ø©^ìeÌ OÚ¼O&ôh6\oQcYÚ è9½W7 ùÍ¿å´mÐΧÁy÷VáÙÍ )1C¶Öü:7~7\¿É7£X3J¼ña¸T%²Ï¹Ø±¨`¢6ÐSôÐÄp ¢m§qÑ+õcaVKùn}¹>H'|#?çÛQjÕA´Ëc«± ûÄ ßÉæ°¨¯ÚmëÚ_%<W4Þ_*ßVü¿QW#7 ª¶×îKà51:»¬§¼æjçé1.¹[FrÕÞ9HשDàiðâ©ÍcQÖn0ø-d¸MË¡*<ùcb=ã7¢û´3ŵ¬"ÈEÞ1¢;ÅÅ}¥õ®>ÀböÖüµ[_§29ÓÖ)]VWéVYnY¦E^jÜ?ëÌ~ÊTIÛ¸nK×p;mëÑàÞÌ^Ml\*o·ÿi¥·i|M0ŪÏ_FJrºm»æN盛z·n䤨V³)½µyÄ ArXج%ð7÷d½µO£$zBÆ4 ¯H¶±vg^sntÙ³N.fÝãý¼ÍÌ÷èx¯þ¾]ĺ-²#~N¦ÐuϥŹtGPÒ>nã÷ÔP<ð»§×ñÒØ@ûgÄ¿Øòü]ßiÇzËĬ¯ªðràôW8w£ 1û-×ÊÅ¢ºnÏFá ¢tZ£°ö¤?lÄQ(7ZtÓwðPUû¼×f¼& b/>®íøÿ®1#&lÔ(ǸϾ!%X¼ôÕtÙn6»Ü]4É®"(<ÔÖgéÙø|½ *ç¥X© ¯µ$êI\b3Th¡¨O±*l¤ç,.¢ÊÙ*´B7¥Ø¶Ð-ôg® [©å<ÞL¡B7ýé-Åæ« í)¶@Ô|¡ 6©¶©ä ÑbTx\EâZöPÝjµ×kSìL>ûH`a Å«p|$Ũðq¸M ;HÜIâ.¸-Ū°LZ¦ÂÝô,Sá ÀqÓ¥CL£Ï PÓiééúh%+n¦f³d5üpbp¬®!ðAMq?±ÉjÜï83eÐV¾hçʪj?ïHÑCKçVÕ¿õùøôµ Ö=¹Ñms«`eÑ0w¶hI)exÿ\NZóYÕ2Y}Õ¥ó¼',YÛ4p¼KB-}ÀÉÏj8ͨ±]0]XPØÚÝ;¼1Ú1MêýdbQTÖ@1?ÔÈýÖ¾ x,µ )Êõî/áàpwêa¦á£eY|2Ø»ôÓ@oÚñ]Âkà ßj`´C¢|-þKãásLÅÀãË(xÊb^XkPªn¨j|¥m[Qç¿ó:/£':¿ÖñÁóñYËUÖql½;ZÄÎa×Ãìz¸ÀÇ6pì l]Â6Bm >¶±-R'±å Ð"uB±]Ð ¥Ø a7`7 ؤ¾-±ç'òín:%ر"¶!½ÚìŰÙÇ^ÖâÑ.Á*"v£½´ f}G`Ö-ÄÚRìt{K¬Ã±2'Ø[GtB¿ÝI¸;CÄÞÂâ ±ðVû6ÿ"v{eÁú¿2°þßNÀ[mÇç(âTTÁ,{sKÝp5w.½Ñ¡À¸áºwúu×øQ÷.®ëZ®Ù¢®!]×qÓÛ.á5¡ºwûuïñuíF]{¤;GTu8ä®ë &×Uàbß˱²P+b°W¢ë#û>ÄîbçØF<¯ñ±ïçXαÇBØ]N ßæ±@,^%Øù"öD{=|HÀ^ö±7p¬lá,±°7,ç& ¥Ø "ö±ëñ&´ïÊv &°EÄYZ6ÄåP0ozû1|åñnEÞ¹%f)ù¤(áMîvÄÞ!Å.±O%ÄÞ)Å.±O'ÄÞ%Å.±Ï$Äî&ËÄ©z6ýd øBîBÊDÈs±RH¹y>ù´ ©!/ÄBîB*EÈ±Ò f¹8_/ ÷l0÷Ág|ì!Ä&ügØCØûþûá³>ös=xئàù³Bà2Z²r.½ ùg«êò5<Ì5ÔKÊáC|w!GÈQéÌ-BÂßcBÊzûÛS`¬+EÊÐXyÙ$ÝëüóôÈ{Äç |·Jô]iwÂç ÝyßíÂIÏkø"× öjÑàÙ¡aûKXöeþöè«PK ÄuÄé M óÑjûÆ&LÌéÃôÕ¯|hã¸xwIÌjÑUOkº-çX,º¶ª,ñ¹¶ßÜBò ÷ÒPD"gÿt¨z)Ñ6ËètHAÿîÔc7ökWQ¢¼<ÛÇg½ Ót æÎõûû$OdséýfQô+ÅR>ñðHïzDK;!rMHâ½A{æ~-q3Aò¬%rËeÁ˦lÆ4ïeEèãVðôã²×»¥¥ÏÈÕ§O"ƾÀõ UOä9§ ÷~¹[äv Äj¿}=Úpj2¹¤ã¶ Ô!N¿bØåü ,½iÂ/Z¸ü : ÷ÿ[±~æ:ä_5âcOz7 ®w[k"øóZ=ëGòjK{¥DÚmR<×'ÑsÄ ©yBë^æ÷âØeT 5pËzÔ¡ bLtÍÙ»6ì¼t¨Ïl¥·Ãì9ÿ½:ð½ò¶´t:éúT\*^X rERÎð,5ËBáÙÉîrì:Ë)>æÉì À˵ÿèªé%JÕ[GAcv»Ö r,IzíBÁït½{¤âÑ4ýéIs¿?Ã5§m_[àé*Q¬ ÎW±ØDH$líUr·7ª.)»rbCf,NthüªãáÞ¹fÎÒüª`s ýÄ*Þ^J?,hÑb Z¨Ø5Úÿ»$ÓÐÒ±¸RO;<áXKïºz6z- ¿3¡£m À$§:0ǽÉÕ4[즽ÏëâÃ6Ùc±lÝô]]é»,vǤGLD?FK*vd¬GÜÐd;íR×8¦»ÜFh·gäË®è2'ðdáml7¨Õè<ñ<ërIPa PëtÅÚ¸>iËí%ò/nkm`8Kißühñnê·åHoyxûGøÛ5u0¹!Y¹=ÎÁÜÁ¾¾ìq×n zïVÅc1*Ã(k~YèLs,¨ ¬¸öeb7¿ï=ºwë5òÀ«µ~íÌï ¸7P2Êco!µ°MùSÉ4ÿ913vï *:ÿb/ö8Cî±ñ¹®öNz¥bÔëKÝUÃ1wy½`yå!h º·ý®/%2t¬Ûpöå %E×ÊX¶ådä&²R+»7gÙ|c¿ºÍEÑØ®e W3ʦ!,yö³kÕ&r5±Þ5ª¦àu'-J,y CÉï'ºðf0féz_Ù²K«-<L'ÚHAM¨ÊÝZa¬É)x¹B©Òy×GQ!Ä4Ãø£*ܦ ¶ÎÐaÉIEêÖb.IIìÝÇ0?Í{nÇ*ÞSdHµÁÑmx)¢V=ß<á¼ßS,q>^9ÚÈmÊa®âÓ<ÚÊõÈKª¯1âÁrxUê¡Mc72ÅÅv{¶uÈ·úék Ú¾0ù]Kj"rJs2¡q\Ò±-ÓxAGC$Óµ_ïãWpCÅCð±Eþ?xU`¸µbØv͸ÃE7kBP¸Câå·|ZdÜÓÓóñ ¶&J:¸Ü cáÒEÊf9 ¾¶Â;Üñ·³t>@w¸Y1/y ¨K}$/TôÈy>zf(ß}CUÉÄ.Þ®ñúPhaÓØòúaÙ;(nºÚCZéÙèóåíJÚeÕ¶³ËËt*·fÕ×íºcØ&W®Ð¡§¾M©Ú &ç@Q:u`ct. ÑÚzJ£ã)?AùlLÐo \ eë¥Lé¤{wÇZ'[,S´jRYVøîh]Kåfü7gÊÏdJT}˳Qe~18| õ]£Ácóß©°£çRpgîèùï¿@{0Ðõú¯KqM@¥ß1tR?qê(Aõ®Ó~lYB%f©vp]ÅôO©bH²~ÂÂaPä,í²fpº¬aÎeOö6DÏnøÒ´^§¿aÿE¡_Å<cã#øóÈ~¨ Ð'{Ë'{xîè9Fï!i>Q¾Fmú¾ªA |× ?äÞ¸ÚDû¤ÛW>ø2s'ºàó½í¢¥¸9c²×YbítÈög)wQÉßTÃ÷jCI7Å[®²d]Û¯ù c©¡ÐäúÑ¢uà°©/¥©¯ &±±äCðzùüÇ¥¾=¼æ®Ùÿ Å#.]. %çG\®õðk,êEai®Høâ|eJÞqqv63¸1zMZö0CG :scὨÈ:ðz°ô« ¨Ë0Ñ Ðy2 d×X3j_Á=*MW/«z¦øL9oQøûóLpN þËéÐoOºtðvà±²rà&Óoæâ©iFiC*3Ô³x 1¹ÊÔªÜcÜÒL@zZÂd¨,a¹ ×3 Äc*ÄmÒÀ¾§`!ÆkZåÀ(ZÑ\$Ø{ìgÆ(B ËHÐ Ô&F0ù¨¥j|d·¯R³Ð®0¹Ôåmg)[Ze9ç Ûøìé<zF÷]~¸:L²ûcÍ2NºBî¶¢Ý6âéɾÍB=vi¢``zEV4è: _¦ez½OQC,éçÐ0ä2éîºò¦ýYJv4(K¾¶º92÷-òlPOûñöçè r;8>Û}½|øÊ'®'¸µÖØlxZe8c)5·µ±åJÕtèWIÞþ÷FÛ2;®DOÝ®|e²¼`[Aå²aÏ0ùÓÓW(Ò_Áxïö£N0é&ÍmƲ|ÿÖ©£ ìj·åõ*vü^·ôý#´ï"JXRhTà à^gA!dɼj¸ù-OÚÆÏsØo¡rHû?ZÏyðK¯;4¬äTF7Ö'õbÚ.§v=ê¼ÙÝèùZIýØõËmß|®¹Ï°s÷h5gwÙó°Ö· ·yסÃ={ÊRÿ&w:¬è ÜåÁö:/¶«2ßnàZPÓè×{6Í[_L7´üPK Þ Ñ@ÇÖzyÛ¦k ¶I'Iøþ_xÐEg|ôÁåx6IKÌdÏî9çûÎ~ç$þþø`+*º0Fi7qKÁt'fºpwäën'î)¸¯VÁC¤jUa9»¼"¢ëÛü=O¹QJgK7JyÝÐÉ£î<ChÙ,RrϺnÍZ¥ ¬/]8Sãå<·t¹÷CÎn3$ÖM«ÞâͶ.nØéÇÜ~æDıÖôÝjbüÜù\.³@ Ý:!Õ®cé®D¥®Îçæ^lá¿!êª<¯^yÝÖI%Ã0.˳Ý6g®qÍ1-ÙëÙöäárd/ªY³fibM³ÑÛ4S0³ÈDA·ù&yôÔ^ӧѤdRÁñÁ#,ÓÀL0<¶að¤ÐÐ$eGÚ@Õq^8z&·$úI½á&寶éNoí£0$aÿq#EêòjUÅØq¦NCóèeçy¹&¥7;6£ô£ê¢}r²d È&aéÝK»WШ©o`©É¯|¦]çè}V`2âróè\K¢¼dGhõ|1ñ"ú)Z²| Ubõ¥¾ 0ùÁßPB îm÷ܬ^bÑsÀ;Bv8/»¼ :Ê ol7n\u =bEg×î±'U.µ·Æ5$¯/"l6rAcÁ×èwâÙõ{Ô`ÖOÇ8@øÁk²¾Ñékv'd%iwT² Ô¨ÝrigîYEôë³$øùsÁ°W£Lp}¼^ðkcTèS¯U¯ÈhÛ%§°,ùÖj8qûé¥*·äOçÓ §ÞöÀo®A·J-ί ÈÇ'u5¥ÃÁ±Ùÿ±*T.#2íÜÀæXÓV&OþÓx}ܧ,ë§bÅÃOꤡ"~¡ji T1*&Å {7ñWO9:?aÔ©«ÿ~¢S=$v&òýPK J%`I*¶v² dn6TúöúúüÒÚV-íi?¶çô7yÚÞ]òØÓ;3;sïg¹ÏÝüõ÷/¿Æ7aÁG]8yÙ¤ÃÔdäh!,»q÷4Ü×°¤áÃøÃø<\7äe#BX}!¢SYѰª¡Ä ÏÎ=¿¹Í¤.ͬð5,q«ËÃ!£ª]© ÛYåeÁÐÛbvlÓ*Í5^ªÓbd¦bE^6lQs)îEaAç¨iÎC<úª¿¿S,ËÐq½§°ûfLKÌÖË9agx®¤PT^ÊrÛïÞdS4k±öx9ÁZò¯Ýñαh:ŬÄ;¢ éh{RlzJ"d¶vçòn·5&Ób3Æ__Û li4sõUbÆþgàÍä>6_·³,²fͤû°¬Ã=¶h~Dåº$~Ô(yªF%?Wü1¶ûK J mANWê¶!¦L)Îc~BuFJÇqÐq§t¼1GqRNGU é°eèßUY¤ÝuÅзª¨êýMi¨épP§dðר·$KTÃç:a]Çø!èÓñ¾¦rc¸ðEKÒtaÿÖË`8¹Óe0ÝNh¤µE6éÄ«t{W|ìóåùUC~YÊ yÅ$îÃÀ&ǤÞa"ÛߤV¶Cµm !£;££ÛUÊq^ +-uÎÛ±¤¸ÞY÷Kì_&wp?躷LÎ-«»jóIÒ²kÛúéÆú!$5 #k'µ:¸æN¬Ào¾áÂi³Þïj¸å%tÔ'¾áÁ©üJ9£m x}/ ïI"ùÎèÛµkÓª¸ZæÊ ±v£'¨97Kp{:×àVº@/gGGKÝfnÅãÖ¢qØo¨ý3ºÅêèÓá#kÖ «I¡`N£ÚZ;¦Ð[x( õ,Ppål¾á_c¡l*Vjö+PQÕ7À0ÃÜ¡ÞVºTLèX£ rS®<µ>õ;Ý ®]IøðBtäW^qË pÙE,Áæ¤|VÏ^øïÕó¯ïùº®}°Øg3\¡WZYé=C`+]ãëBQa[@ð ¢B'{3(ÕÑÕjÂRx_K]Uz·àV})VRDl]*A`í³IH¶V.ª³´äKân}¥ûÞ&¡°3J©÷¿nÚ þ½ó±/~ÃÈ fÝ:C¦_Ãi¨T²("¬Íà ;[âa Äòý´&í(̽ÊÇ͵Å"£! /6ØÆ±{ðUúL+¨¶¤Ý×WoÀìPá.öwi=0©(T·wXýK"¾Ñ²I¹lÅ2Çb>Î)ý¼Â63>'áèb0ûéy°6¹¶ëhe?_á`i¶º© VxÖ½5?é ZçÁ5e°ó¼ ίûôfûú ¸r¸'N¶V[mYÉÆ5äII{ Fø)ñFKÛÙºv<eð9ñN&ÁUªÚçì`$a÷qïwYÀOjÖæðª$²öP u+£·-v>õ8dØD!<Aðê§-sû'+4VièÄàè 9´à ¦ÌëÇsì¨ü¬ x@xðÙѸcwI<Ìî (¨±CÍ]èÞxÛ!öýïÙ»GK:B£Óû[eÉýYiÒ@0WªÔ©\°³[öm-"`wÊR°&:Á%bµ_ìÍÌʹúd6óg¾m°?õz,tÛ¯ú+ƬÐÂÎ$Îí}¾rë 5Iù%o0iQÓ²kq)Ö¦;7÷;³.Þ:ÀL¼1 _'ÝNÞi24þÆvs%¯)§éMs^×ÈPs$ªlÜ;àÊVHýªx²¯&¿-³À*ÿ:÷Óò2¾Å¦9äJ´0pîÿ#¸öt|ù5AÌÃèaôPK Ó1Ì@á ®*UpM@^´lË_h©-iÅya ´g,ÛÜØ+fM÷-éÊ89£°e¸Vp®¿cy#ÇÍë;F1ç¯gMÃöôÇ®S2]ÿíSß*¤yÓ?î^εJ¾ã ¬j]㵡;¯oú®eçÓUÈ£ì®óÓ©2TË|JCþæRjè,®;&0ü¼±gÁ´é)Ö,nÔã4F1TåLñʶëYxíãJ'¬4H·fo;¥:ÿr¦KÛ¦oä^®¥Pg×yU n(HÄVßäÌo9¶§`çMgÏͬàB:«U ÈU´ ¦â&æÜR±4T,â¶%wpô*îaÂ5¸F¿û©Ê ÄëtÅ)©B×lßu¼ ØÇICÔS²R0<U\KU©T¦·.I0H=M¦igSÿ»§îd²¤j< ÿuà0½<+Ý5 Ll¾Ú3 LÐêÌý3@á;| ËäÚÊN+h£!> U®rÆÑÆU-;àÚi[ÐNzÁ?hÚ É4}Ad}ê+$éÃ9)2MDÒN'¢³r|À$ßûýwQññè§Øgt$Ìx9aÄ(¿:Æø÷Ä<´°Ì4Ê ºXLB7c=è Ä5óÜEÐGF»~\dÍdÀ +"ÚÈdà F$I.Øfÿ/ÑAbÈ8BI.ÿPK Nô§ÖüÎÓD¸»ï<øÙ·3x¹:ÂJÖióþ°`É'³ÛM ÏfüÈRªð®ò3,Ó»:g |hãòÙ|&ð¡Ë§-8 kÔ^ò[9ì³»ìYDPßà½ÏöÙ_PK ¤ÂÂ¥E2 ÝÕÝk|=UÆ3¹ýwIî² 0bgª«ç\6LÔ#Sä$ëΪç=£Q8¹FËC}F'ßà PK ÑYÆBRMÛt«çàf×7[M©¶¸³»³)ß´È3VkÜZç)×3ánÄïB/Ѳ,a¸fËÖW:KÃ÷¨|¾wÿ^ûcæy05·äw<O§ÎkjÒü®[ÜÞÒ×6ðÂì}fÒ·Âä² õ1ÒIÜ=¾È´JóÉÐ%NtYMà2q÷YidýØwVz_AÉde,>ù±=ä¹f<Xk<=ßãñÁæ"À´~°¹] ìÊÛ;©j{¨Ô^ 7ÄaHpkìȰEÿ½°ÞVÛÛúbk¾Þ¼ñÌTXüƱ;±ÇCaɱ(RT°4zeòPËð(jJ|²OîYóÂõ¹ÂÊ*ú^3ø\ìÉ^W.O-pK£¬ª7JP(t¾¹=[Îþ0éÒAÏc¶\çð7*+È[©QÁÅ`¾Z):æVæ¹4öÑ)âµHùk^ã§9¼Nôôð±ï! e4åãw nQÁÞ5¼Ô)÷ W®G·¦×·0û«ÙßÉ*ÇÞ¦B¼¶j[MOIÁu)³PK )Á$ jOÈpx(,Yf;+.9ÀMépæÈ?à_p*ì+©ãØ¡í«ÝÕóì³»þ|þô%4bCY Õ8ÞA%wãxUqy_ÁZ"ë1ÜÇ8} `NØl2ë¦ÞÒ-w»Ú¡î0¤¶lç tÈ[£wÜRà/3¨uãÀân×Ѧ&6å eFV Ëp+éìp°Ü¼fïÒ¥-ÃÒt[MÝið¦I-[ãæwq8e÷Ðè0Îâi¶iêkØVi³Su~´f[.'vë ìIéG:j¿@[|yfKñÃBÏXËótê|_7<»»õÃK&·Jµæ#b(ç¾ )«·ÌsQqÇgHy¦nQÑÔ$a.JeQ ÝõÌXÝåÚWÛ¼HU²Â/xc{zGs¦Þ°fä¬{±¶è§&¾wê`¸6:6èw6IÒ¦UõëY5õQU[m¬\¹°ãÃc»Á´Ò»k´ô£cPªe»\ÔÛ9·à\smçÊglTÍJðÞ0ÜQ½hûÅUN #¤IIVÃE;-n9V·»¦obRçzAà&0Ç%'° eIne¼Êh½äí À'ø!÷Òï`H*x@wX@)ëa¸~Zè¬XÁÉa½£ÆïÃÕQKIúy»[{ ý±ëíãië®#>¹6:é?Ýç¬í3ÜØÇºnîû)ÍÿELôÌÑ©[÷¿îrSl° sôQ£:}ÄTÈ^¦; Wñ|I:O§IV"Ëÿ/üé'ºa®ãdA(2TÂHÑ]ÊÏÆ+¸ x'=}&v»Òc¦ ,àýll±°]|V -ËSòÌ÷¸QVÂù!¥Ã'Iøaùø[ýðïß¡cʽÊRÓu¸I×y:çWTX!ÜIâÅ ÊEº!Ñù5Ê}4EÉÎÓIü=%EÏJ2åcÜò=M"ë6eeýþ<GTA±é(Ï×£hº _ýM&ä%m'Høì´Ñ1/eDÌö59Ù+-I´¯¥%Èú1Q*^¯XÐ/9äÅÔß¡|NãþØ#x¸ zsC¤êME¼<·ÐÜ hÖÉ'ò£ù'P 6Èr»%7i ý,Âs«ÇòV?Ëå*íÇrзZÐ75_øñ_8 Qû:¥ö:¥â.²3²üNIåÛ¸çÙÿ ©h9(£é©ç(-͵sÐbÛÆ[b:îÙ¬M7ç¾^ºË]¤X~¿Ì¯9^øñ4Ýïdîq=å£1$±×ûÊ[w-¼´GùÑeª±ÅßÌÐNIÑǬyÿK;KÑ2¶¿ÚYIò£á}PK µX>û/\KÿËå¿33Í¥èË3gï³÷·¿}ùý¿_8o£èÄlQ¡oÇpÅãRïàr3Þá=¼/ª| (æ ݼ (Z±+Q\ !2L±d,IhÕ¨öj5KBW®d-¤ÕbÁÒÊvÚ;ÏHLë¦j/[=¾J#©LªM#º©ÛY ñ¿µþY ¡±ÒMmËé¦6¹\ÌkÖ7xÒ+TcVµtñîìE½,áP½½BÉ0´Ìôxy¬ò2V2mÌ P¹¥5COikÄn¯P^ô"´¢sTVç5cEBw"wE½®¦ Õ\HÛ% n`EÆ >ÂY ;Õ¾ê0ävÍD|OÜÄg,O7í óÝ2>WðásT-ÆQËRWrzÙz_²°ÜÂY_)øßýaõ4(سѷv±nèsÌûµ;,!fm³^ÑëJôû4ÄÔnØÎññ15ýúÒëð+$ñ¾m$¾Ñ<gÕ¥%ÍqìÖ×´mÏrÿfv÷vÍáÔ¼ãë&ú´fÌ»*ùÇZ¯Ë½¥1ë§®-«ºbß³Pb\PTçæ8ï6^5$¬ºëÿWÝ¿Á±â_`rEEsÝÉ· àµRà>j¹úN¨© t¡uZÜ+þYFº÷Úr9DÙaþ1KN0=ÛSmò*èW à|ͨ£ÒKðûjl¯ Y䢳ØÝ&GpÀ1î8ÉAÉxQ¼¼{Ç=7Ã<úÍÉûPî£e½dfdÈwq2Pñ2Rçå;¼¬çåO®M\ õBòá=þ''fÇB¡°{ 3td8 aÛÉçtûÑ_©ûØq·R]ó&à ëÁf:³tÐgªSKÃWp ¶î(^% ê¿c·¹8²]iðØgfÎIj̾ã@é=+±Ê4Ë2%e+¹"^ÕJ[0-Ϧ8MìA§¡ßWxú@&Ó¼¾¸[|A¤/?af>._¦Ç¾bASWÉnÍÇ F~OÕÞ7< k,ì1H~vù 5?sceÝì 4¶f°{TÒ"\î×éè%p]o-iÜ r üÀZóZKÐß .7AIÛ'|±»0Yæßà'i øeKnØøîgq=ò4¾SJJ¨ÎãSÇ8ȶ ãJC·TÁÛ+¿xñkCÅÞ6IÆp¿4ÙFK°º¡ÕèòÍZpÂÐR~ÅsÈϽ¼£TÅA[·ÇõvpܽaX×® ©+F|AÂÜ%3 ÞS1Q"~ßÎLȾ_Å,Ѹ÷ê¥ÍÒ&éçõ øg\ÓØ£ÓzÇ!yµèfQ*ÆØD-ZÏÃ(pÔY?ß î¿AÏùo ¹·e²ÏÞ %wù¬ürtæyÜë>®ys6qç_GìöW¬Mâ?¨À5éû¾UÙJzþ ñiùµVÖÉ2¶dLà^úfèÀL/ ÅpVåÈÈéÝÕî9ïsö#þûôá_ ®2L a¬¤zæd¿z«Ã)÷)îÖ¤ë1\ÏußCÑMOÅu ý8@gËï¨a<¿Bp@«>0³¸KÐðí²áy¤ïW¬äGH%ð´×òé¼®pGÈ$ñtðEJïAfa!¶Ë(G°Å Bòæ9ï)Q¼áÀØ5ß`!,9Ï QFÏD¥±¶¸C^y©øµ¸wóáÅÝȳ÷=¡²óQÁ=9aeÙ"Æ(¼±ûñË:)«LIB¡s°p}^}xÒ+Qõñ!°J+wè r©QÁw%µ¢×FÜâk0uàzùtQSᲬÇfÀÓW Eiïb`ÕúÁÑ=JçÙI>ÎQ¦-³m@ù|eu&d¯=Jí9cèÎȬ÷2J ¬Ês²1¾=áXÁ4øÂfFÌaÖѪgT5γsè¾cØ¢J¾îæ%NÕyôáW»Mü]k4½ ûǦ:mô_b.5-srÎÛä6xL>PK ½+©A®:M§é@: I¥Þï÷Ë£¿Àt-ªk¹xs-?ÆåR÷93f =sÎ>ûìoûì³wúÇ?¿üàI|Çv¡ ¯ðáL=8À9Oà.òáU¯% Àò|¶ À |XBâËq2Pcâ(ã |¨È°ø·*cUBü²¶6£ZùeÍÐ=]2éeu%oj+íÈ3bY½`¨VÕÔ$ìTÊ&[UU͵ØH9'[tC·%¤ÁÈÁÒÈhiÙ2ÚlueA3çÕ "IÚ§KyµSM¯aÄZÖ+üöò¥bQË[zÉHOTfÔòhɰTòÈ(dD,¼vÖʶޯè³Áüì Ý#Dé¦!©dÕ%¸FÓÔU5]µô"i3g%´heÒfËqûË&C3Gj¥¢ñ.ÿ=Bü é{$tz6',ÍT¿óðZæöIx$Èë6ÿ¾ggSÖRóI&")ãu Û ´9©ø¢VÉú6_"ؽ2¼Sbñ®ì6V]V+NÆK¼FïãÛ¡©£6¢jÒs(%2¹ û$ì¼W䨦Ô÷(ª"I^ù£¢÷e5KB[rÀce|hB'ª»ç»}êÞ'SÎÏjW-Ai1Ä¢sCß_ÚZ%JLgPÚ5§6i:o©§Q¢\PËeÍXÞÌÌZ&ÿu2p¯îÖaöçêdµâ²ð¿{knßÔèÞ_©ªEâ¦ñ/oÐ;´F5úéeºêN{ ªeOý BhçjûbµÖ}u?â4§\£ùc$¹Fß0}·(· )©)ûn"ü#ÂØCc;"4vÐØº°Ýx$ýö1<½Ù°|ÆCHú´\]®V?iÙn)$£dvú¾u2µu´HÙ·V ßá0Md wU~¢¶WhoIÂ$I¸Èïÿý=|¬E<|z };FÉä磼üÜä3ÃÒÿ!î ËqOáiòtHpt9räõÍÂÉ8rä/ë³´w9W$EIµ³ul¢P©ul¦Ü²±Ûëb}úîÝÄÅÉÝ»Wpè¶-¹þ*Äâ9Ç_&¢®8^Æx !+ܳÄÿ¶3JêÚpZÅ©Çz\Ü3ÄÌN¬¤oo»×ï&Ýóql½à`:ØçöL¹ýÝFg-ú:ÃqyÑùÞ wï¤>QNåÔA£]%ô® àp )YNíЮ¯-¬eMZØnÖ1h²´þ[[æS«¢ зéìºPóµ$ªñÇÜ/mãÉd2Ô¯g¯k°oô}:ë)ò!<"±<a¾ý°õËÍÖèÆ#ÿáøðüJNx·ëõûÊQ¶÷íÜZdx̧ٽýóecðqÓTrT,P÷Dc«9 ë|4rTi2.ë3ÆþøwµÄ:¬"Æ·§8è¹ásöPK vY,ÙIÖ"w5QÎðUQØbè¦×ùO¸O¤ì ±%cÐtEQ²GÆåÆÇy^ªk9Q63K CÑÆRÊVrMÛJʺ¹#aà|g¿QMÜdS]çUt³KÂáV!1ów+%5vnÈä馦ÿ]ÅrÍ¢X6Ë&aÓe»\fB}íi$åk;[Éí[Ì®ÃUíól76¯fch¤ZÚ* 9sÓ2vÅ1Ĭ)ÛªÏsL:ëèÄ´6´ëèÇÌøÒñ³½<B[ Ó¨M|2iU¬¯t¼Æ7x«#yyÄ^Ð/Ü!)×ÅÐv2O¸Ä0xQuÞhuTÈruõ £!tDHÞkó,uÞMIkßykB½á¥°rKbÓS?ÖÀëV>»pÇTWWå(i_ÎØö`¿ìØY?_ ¼ ÚKH)}èÔMÒ3u^ºÓdê2>âFwáÿ7¿&zz>ß÷>ï6Y½J±Y±ô+jT]e $/¡ì×¥ð£ÍÂýw, sTÊÍaëÆ^õ#'íÆ¾ÊÆÌãÒÞ=- ·wJ»ù·Np;ñø4lrlØX´îuº0l:`©ÈífyyÄÃú¶cÌ ô±ßäPK ü½¨ õ±7QgQ1n|8àMT8En-a%w +}\_º±¦c6,>Vþç`X¼<!ÑÍì°t,ÇÅSN7¥ÚÿÅövÛÛCæßí K\EìÑB£mâénµGå Ù[ÇêAÇ#"Ê'¼ÖÉt(5ÁcOðTÇ3l3Ì¢¥c«W®ayuÚQJª;P²}ùËd¦iy³)¬rQ:ÝõÇ6Jn}Øb^õ¿¯¼y9Vé3GéÛÌRNºÇè¥`*Ù${<%ºº£éï`éÌW(é¢*PnÈ=UÊר"N¯Y/3H Ù#P¦w8\#çu$éC"3^`DÁÛds0ý2Ìó°ÐÅ&°Ià7|6ºË:á±|Ak>ࡨ¥3¿ùÑó CèÈô1JåÛ{øÄc²×ªÒh0têIú/Ô¹à@ϸ±¯=Wæ©Ð#¹µ0`ÙjuI_yõ58à6¼ñ4°ãÅ ¬(Si×Ú÷÷&&òá Øü¬ÑWr_*ðxM~ú%+%È©ê,ÛÖ½8pGÕÙ«ø°o]BrK£Q|ÛnÑyíüîÞc¹Q:Fýt3?äpç}OV<§ÿ FÝÕ½8ÆÈFÄ"à&o±È7ì@ਠI\';uÎsì´K{·:yª9£yßAKÄ¡Sö©÷d¤â ÂÁSDÈI[ù¢QDD_³gÞvÐâ±!âTNp¥å2ÞCïKð¡¼*ªíO9ûÏ·]ïÜ/PK ªç *yƳFW÷¹©Ù¶ë¬Ö`X8gÕ¢|Ây·«è§3ÿ¸þcñ¬ät>/ê_ê_vßníV|5@õME;böA*öÊ×,µf·ÖsÊ0³xñh×Ý2Ú(ZAÍs]¥l³º¥º ÚÈà` ´;eXt5¦áU:¿Ö[~æ¤êê~ÖÔ-¦îk tØÐuÃâvéÝáEË0)i¥Q§Ã7yCí"SrFÓ,ª;-øXÇ,Û`Aa5 F|X" ´à<}¼áDF}ÈñëAl`ÅæÏ0øÃì ò¼QûVǺ[bð[«Æzå%w?u»É¶;ÇEáõºªòêKDhì_ó4ádw8÷V»"§VÂX T~kôØÚÓ:J!H´'åh?NZøW°xâ3<ÉòbÞ£´²%ÊÉ$kÚÆí vúÌ©³ÙÖY¨Å¦Ýº¨8ry#'ñÞH¼ OzÉûN%QÇ0å*nóGZü\ÀËqÿ"=CðÌ®Ó8a\âRx|èÃØä'ð~a?o È)*=<|û˸«b3>¦Õ>¿C~A2+ZNgsÜ è pU¼E7ﺰo1±Æÿ ¸ËóC 3-â$ÓÝáRùläå5ª=] ín Ø ¨}(E|ÓVDS!± >9Ý®ív·ÙÝøO~ÐD1jbüì2ÞÙ.Û·ò¥sçÞsî9s·¿ÿ|ÿ `Ï$À·Xáîòͽ `Cß>i¨¦òGì=K×^IoÕee¢3»iR=Ö[ÏM:4ÕtÍÞ÷A$öË(Óýp^ÓÕf½¤EVªQf:o(¬¶ÇLïݤ߮j¼aVÒUVWLÕ²ÓFéHUìôKk˨7ñóÔu·ÕBI(u.3s}½·*\ÀxÙJUµ ìZ;¬óPÀR£Æ#}8I?ÓOy~M*«bj%µhXwwýÜ©5lÍÐVBåvBÀüðÃä.Ö¶Ø}Í® Hh½äµ£Õ$`YG³Å»Ía DÌ2À±þMS·µºº§Y¼Ñ®6ã",çu;¡¶bæ ]Æûûánú×ø`õÕ¼¬¡ËåÏü¿¥Ñ4u[ãíªU~KÆ$22dËÈ⢠ýùèïDëí|cbJñ4eJ´úh_!$S_àûD»\ ß ZA(~B #B»Xë4¢ÁZè3]µY¯öç("/]ÞWL~/uíµØ¦=:=t¢GÇkÝ%.cÉ1 ¯¹ï¨ÿð0.wrìâçW»¼^ñE +®wó+¾W'WN×¹¬ì ÄwDma2ô¨)ZQ+¶½øp)êã}T$yåuÞh{§ót|]Âb2¸-ïlMá|®ÛÓ;ú®!ÏÕÑn¿? û+3$E;8ùe·m]§Ã'¤±îÌî7ÚÙ-ô¢.ú$dQ9Trª.M,ÝCczRW!xÔt¥Se'pÈ÷%×õ$W t|Q´^¿OFùÜÿÈÒòósô(j8ãé5ëÝpªª[O Ù¹ÜÌQïÐÙ~DP¼Ñîö¦x*f£å)Ißq«½EîB¸7hä{C[è|×¢ÿè&âã"=ÄizÖ *¤ª í&Ê1géï1iÄhOå_å/a䯾Dìwm:¡Íâ´Ð:$é$d[fø i~¤öü0 ?#ÆÂ+z3þâ±çtÓdRµ:$"bz¶I>cü6õ¿êÅåAÈ&býÚ}*î §q)"tp9Dÿ9D.dÌ×HP± ©åÕ>½Æ ÞgÐÒVçJvºC;MßâHªî&7[ĵõ7ìÇ*Q§_ôP`Ya¤rOɶÖSwÚ¯j>ÆlP¤]1^çtÅÄåÿDêEÇÿß Í×ÂLÔÂü$9¼DU3v3ÌX2_øC~Þ: "ÙIHê à3|®÷/ÞPK ÇØ`]vºëaÛ¡AïÂ$jmÉdoF-ËܸíeÀt°eñ|¤5Ë UYs°çpãCy~»Átþ`ueRAÑ18¤/C}:NCþv¹½´ìË3GTçL>}k9H¬µÎúXø¢m[Þ¤Qé q~®2*Jʤ½SÖqêêÁGh¿..:øwN ¼÷l:ìSh]OjÄ)fõ(/¶CÐS¸|«øZË l¼Ü׸Òi¤üpì÷qèñ²$á¬H?éä(EM%!Áä¼ ±CÔ>¢û L§o{L`Ûªõõ¸íX¤A0rýµ+£{~©óÓA=)»ÐL%%kCà&LSiô·hâ<«eÍÍÕ©¦å¬ý¥tì:3fþ}.øÿ¨½F³³ürãsØ{#¤£ð÷`(cßÿÓÖçë\ª§ñÛñðj{ûPÿ¶Íïuï01Ú¾CòPK »À8KãÆ·u)×/ÛÝ Ýa^²ìrfW4[8nÆ;nfÑߪqc±lZ>ËAñÃykïyU¨ N/⺠̸`Í!uQ2e¾M^/ÜÙä8siÇ©ó3ë[®^kº£S·r¦i¹\æJ-ïm-p͵ìÝɦ޽.n ÍU½óì7ÎD]ÇmDv«B>Ä¿sä]AìÇn!DAÃ6xX4QæFÎ.×*Âtçw4QñË5kØæFM$lz Ý¥Dq7q?9"áÝ!táj/0@C+¶,¼xB¯BÅaºÔ 2t5B¿Ñÿ¯V1´%åÈu©9rQóbÆ:É«Ua ÃØÿg¦qfÇÞk²eM;nÓ·¡o&CöNêÜMë5¶ÐF_K¥ |Ïz´í 5º~¥«?õ é}t~ Á£âu Èôï?áûqSñn!QGÖQñtÔ{y¿Ñßì°Ê2AùÝ9ÃðãÔ·AâúIêü ÚeFþ#ש[¡M©+TèØ¨Þì!estÇVI +GE«?ýá}\i®?Ü¢þÒ¤÷ÔÜǨÚÇþ næl' ;AÿÆA-rÈ»Kaª£û¶»ïÑqû «k7©Çhû³xlµ_ÿÓZsÕgì<k·tT%Fîõö&tn¤ú?'&8ÙÍÃÖK=îñPK â®(ÄÝFb9Ås+[a×sL»Ìе²£ßÕ§,Ý.OäÝIçMÛô²ÔiñØ«8CûióµFu;E}Ûâ®fèÖîâì_*^Åt&VjNyª¢W »ÞÇïySywi·¡[ù²]àÓã ºnpb/xºqgU¯K " ÛªîîôÛÜÚ;"E¨RA-q×pÌm^¬1¥S¸!euϬÙ2¬¶ÒÑÃàùÊ+XTFÏâpVbA¿ýLúå)Ñܰ<SÚצUâiîzºë;c·¨îdÁEâµÓ©cHÉçX4«2>V0˶î52ÌþgÃùÓYXoØYå¦kRÑm»æé"eTÿÞã@˺áÕ½¹%¼¹½Ã O0poúxú2ãPŽ:ýp17µPk8_6EOÛyÂXÃóøá¥# ¼eñ²n-:åFÛÞÒ=û}2½V³'ìe%ïêV'ªéðRr{/yÂKNwyjL_Ò0A ãÐð)F)|÷4Tiø_hø:¡ïVѰ CC 4+·5QÑ`bGÃXª°2ÿc:N:Òð`zé¢ä3Sb:dº¸úÏ'ª^¯s»T$FÿÞ Ç±íÐzC¤ÿù?ítyØâvÙ«Hæb(î,%£aí>BËÚVD©®Ì{+%->dB9¢ó3õjÿ Ü:óU¡Ð¦éÝOÑ/´ÓÚÖ!:í"H ?½ù ñ¶ºûP~Ig~@è!ɦµ!Z{ (º·0_2$ùÜ _Ôþ´o{JÊF"xYR¡&ðÝ/ùî;Óéïj"ÎÐÒDä;ºH¿/ïÎN¼*ý0¤0æC®ÐÌtE!@~5®6yÞ|ØÂV¥fØ<?ØÂDOcæãÿI:az®@ÛÚG|UÉgBÄû3ÒDûl(ú_£{è¨ãÉ&:7ì}hãØ³_)ìþÓ?Æèj¢ûA+Í3ôÝå'J¡©V/6L4FHh\Æ$f1Ú]#ù^Ô³DjhOb ǤsED[á¬úe¡¿äç ¢"Gö¯oQªBO`±¿0ÂÇ>&°Þ ¸ þ =E=bèÙ¢I<8Q¨«v¨ä·ÜU©óæ|y cº`ÁOé_²X:ó+zè;Yýø3ÕµÂQÐ×Hð¼Eù¼þ7PK î|ñØ£ 9+8+àÈJtÏ¥P@6ÄAôd¦M$ti.tl¬aKBÇycÒrP.L!UÂ9xp÷ÞãC°~òÚ3¯ L ê¥=W³:à{øå±Éæwïà+Ê[6°Ãm.ìA£fÙÀÊX@á*HhM!RIª`´AÔ[¿Í çÇrµB»ûjé?} VBôÝ`´+_!¬¤fúÀºéV§áå$#QÏ,ö¾HQ¨Ñõ5èR©ØÊ-'®qJa&ÔÍÊ5jºÿbÝ^ÑèÑÞ^*,ó&-.aQí£º£xOwA~ï^).iñìÒZ½lÆ(Öuu/´ªÚL9óu/TZ]{,NIÝ®5¸Ní&>àÅÈ%,ë![àÜDy×õ{Fç>EÁm:çnFø|¤j£¸_Õ7OsÂIÆ÷ìý:mQü«QzMËtºRÈ·EOu+ÛÖkÆóÈØÑò3ñ<dÙåWA¢Pg³OççÉËÂBºmÄßP$»Ú&÷SÆ m"ÝÓv³ðÚ=ðÚZ¼ê¢>ªÕ4g"ÁÙ~ð@üþÕß)© þ æ3äÍÈú"ÉÆôû4ä|ÕùrÒæ·ññ¶åy¸+´2©h4{ÞO^7P<X9ð2gÀr¦YÁU«ºF#Ãõ,zã/PK TÎÁëlOd$ÊO+Á¾"ðV/â©=Û¬û§ÜÐÇg¨c4ɱRBÖ¶èÛÙûe7K/%d`.Õ¦¢½'-7ÿa¤Zmkt_] à<wu¡ô¾i¯¥ t?Ylæì§þß|«¡Ïß©^Éìø PK àaÝÇ<®hb£Mײ×=Ü`p÷¤¦ÃPßê¾æG¼p5l÷j¸»Ýgp¦a©+xB?ç<µnñ¤Ïµ´vétL,3Ínªí"-2Ó6â)Ôav M¼Ëàgù +v&9åG<é¾úK/åµH¸©Êbùauk{³*ÊZ³` ?æ& ¶ÅöäPqkj²óß{g =Ë#Ѥc{ TjÆ¥34&Aû<2©~OAA/Íu$ö¥=çÉÓ¼cӨ±e7C4PcX vI×|[tÜü×ÐÍÍÜ@ÙÃòtWØ åÁ~Ƭ*ônkçì*X 1(¼ç(j!cykÛ ó¨¬û%Ëßi}Fåæ>â\¤¿Qþ)ÊÇJZE½DݦÙFÌÕSz ÇÛ%Ä'è²lè=íÿ ó/ZÇp§þ §ét7¸MdÖZ¤ßÝ´þCHòf~o2)sàÉukoêFé1n«ªºËZjÏA çk ¼TéOªñ\Dáo(eór.½ç×â+nØÇÒ2Ï#ïñ6À, |Ý/Ù L ÝÖâ®æJR'{~Qöë6¸sé)«8æit*zúú/e¾d`5T"åZæYÈ7+Û;ÓA1.¡5 w¶øÇ\ÇP¦ÜH2®KEvþ;pÿ¼°C°Õge¦åPôd!éèfY®GÅ34Ïx¬sõÞÔå¥Å4gÝ<Ñ»&Q9ø!±äáV&êó¶eÒ®¿µ]oþûv¦No¢jai²7lÐÓò`>ÌÔBc@V5ú·µ{öV5\ 1°ÞyZ@H«æHEKqM+Äp°zÅzP±üÝÖgÔ¾`æÃç$ýòÇ(+Ô êÍ&b¦î|4,$mW È2¡÷i6{þ7̾hÀ\ùàÛ6ËV³J{#ÕU®Yïõ_PK k§®mÅKBBâ8³ymDTËÐÞ¬ í Dñgÿ¿ãd Àí¬«Z Vk¸ÎóüÊo7Pc«¤«,êP½aEàïé >¤"Ývå=¢Ëb>¡¨ØfIâåáÅGèHM\õ-í ßÎñ>ª6ÑåÛuQõsÃo£X'´=7ê;Ýl0ÌO¦³CîôÛÛÛg0}áp Zváz.vCíîÕFí*GëÃjÇ1GÅnº<ìú$ÕÆpKÕã:Äêl'Ü& Fô¦«äíB¡0 ßÁ ÅoP¾§ Cë$´NPþ$tª¹FÞl/ÐfȨ¤´Ô3ÆÜ1µBñÏ}<â k£õq4ÌÅ871ã|qVõWN EF&Ùó¿B9EJÁAÓFT2eôVp`ª*¯@º)Àôefcâ×1±^(þ~côÚ?ÐzZÇÑÒë ¿»ÑÿÞ_PK K]Sn* C1§»¨SÉ~:تZùnhÙ+;ǰCU¼¨h)!6ÎT ¤¬¤[& ªÐJÅÞcº©Ûý±ÈÊíÆNô1xNYYò`]J7µt9?¡G CãF,U1Æ¢ÎßÅJsgcÌ :VñèLEÕ vÕ5ÓK[BäGÏ+¥Öu¥ D\êáÍj[3¶¢^V ââL© á&¥ÃµRÓ0t®Ö¼(eIÍahóÓÔDÖÊ'ÒDf²÷*E´ ÜÓm-/Ø\.FYÇÈj%µ¨Oh£ÃÖÈR0§Å^(n<]\`ØÜ\ÁsÈcX{>4ËõÜÿãè FxutM[ÏkczI§ø ¦e+Ü©ÒZ<«¨¶U¡CÑø:Ó¿fá&Ûë\¸¦©¶¹«²oim:{ûªçÙÊèéf«\Tµ³ºÈêZ1ìåêeD0-¡"coÉxïHxWÆ{¸%c±{d±!²ÖRdع|È0´)Å,Nói× u.çîdY7²¼S®2©uêÙ°°>ñ>>ñ!>âx?ðOñÏe|/éÄr]ñRT¯2¾FÚb¯§ÂYKHÂÓ:é®Zðoñ5²õ=~ ìiÚD8^gpì.ç[FǺ%¶F9ÂàðÚìnȳ¢Tº¦6=dlÅT)áHoã¹Ò>:àpW3i 7$ça8Ø0ÝW¿r¼J¡ Y¾¦ ¤Gn[µh¶EV 6)׺Ñ\ÑæÍ[4½m ¡²6uoftd(}_!¢¦×JEÕÒ4%£ÛWqküêWl"m°A?E{o£¢÷j7ÊA ¶d ÜP¥)_>íkxªÆ.(0ßZ;ÉXw¹e&uM] _ÂOÂ8*³{ÔÍÑrFÏDuîy¡` Ë {̪%]° °®-MW°"¬yóÐ~@!䢪)âÕñÐÁãÓÿø<v"k"Iv}k(E£îô° {ÏØº#[#ð1ëíÙ. .±M£jöj¼ñ.>PTJd¸2=Ú:÷Lx:}Ò~gGEݺLµÜovùÜ \BØ®ÇõÔ N騾ùÆ@O?á ²v7d:ðÕ%UY lçNâ}O´ËH¿ÙµÜnAúÜÄLèR52aÊ. »Ë¦B®÷>éhÊM8Z´¬½¼9*wjÎ `h&¶rI+;glú×X׫%Êk6å·-1îë¡¥ÅÌPjÏ f³ÓûO1èÒöÒ5ó!»$êFrX¦°ï¿4{¦/Ñ`'>lFã(ò³þa¸¬eµ-eôSx%Lî«9ÇHh»íþíÔµ¹ gæ2NGÄ »^55çÛo4-1 >Pã$®Æsá5|[ô0#ínîqÝ^&!;¦ µùé[ÊØ÷ÿ[«ÞýeÙBDRmÕz]rðå ´czrüPK --- NEW FILE: objenesis-1.0.jar --- PK [ÿlaûOf/",IB¾RraX)VÉ4&\û5¡hT2i«uÖî£I¿EºNû,y§ÈµÎÆ#XçÒÃzÀÌ2ÈÓ^!:P$9¸(¡2BêdÅøV¤´DiÌPK |b2â]1Üs°ë=éËHE"5Ü'=NGJ¤>IÝ&5ÞîÅäT2îË>ZHí¦Âl d=z¡{å/<«:ÑFËär{ÊÄU86ò`á¡vÚäÆïè¢ëߢìía&nÛÇ»ÿûTųeVΩÖÇ.©ë(ñÏPêÊø¡åN;Ýmkõá×jü³ËéÆÛÜ ÝKIóUÎÍeXªx¾ÐsÄ`Ó2ôw£á£¸"ýOÒîúÍc°f}ÇØ2`¼Cþéd_,Ãüö!É/b(ðó4 ÈÀé¦DÑ*¸D1hj3´ÏÑ¥ªO÷s@ C3C5.T¼$´FaGȽw5}KÓ äÃ>aH4Wè¤J®j cîòFìûÔðëÊ/PK o¶ª1F½^PK °ÈG4ýÈgôç$yà%/ 8¡MßûÐÿ$§ÿAéo®,>öè¹wæÎÌùÍÌ]ýó?ßÿ ºDøÃ0XÖ=~sß5.¯8ËÎa7ÿ É5]5Wõk:¨wÅät®ÆDãêrV¤óñu×1% ¢ÔÝ5;9ãu'?2þW§{HWÑJØCÑx4®§UV$Goa/éÂq=]¤6sj¶¸zç_qý¯èn2Ñi¢0+Lº×ÃÜÇ0À\ä°2ó5<7ø¼ÉA»Ì ^aÐo3×wØ)ïæ÷TJ#µ`àpø*M=Õ§ðsØw}ôAcÙǤ7³ë¦¹6ÐÊ®¼Û'CªÄ?ö73ѧrzt*N}Ý·ðÄ5Urz}Êhwòå«ÛfTF³ìzy×d2V9æPK 9=X×¼®à +*b¸Æªìo©è±bXSÑ´7¼%¿óaÜV1,×ÂÛ2Ì;a¼«à=ï+ø@Î .âÇ2ô--cµPÑmÛ°z¸¹]uƳÙMý#=ÅEj¹°iLË8Ç0\^ IpX1,®Wø^¨}kE7Ë)7:9DV>6 ÃáEÐnrgáLòrl!¸ J&妫nkÕË¢^YÓi1únL2úï?$Y¾±[4¶.LZ5èlpÊìjVXå <LÃæv¶£×a¥ ºÍÇÌø0©ÞÛ#LcÇ3 À//GÛÓÊ '-ªfÉÏßòÏ<iÎûÕ!RÜ,Ïu6°;-KRc´å+¢j4bçtWPÐPyÆÃH.hÑX÷@%, %&±.²1jÒi)ÙhÅ p¡ÿ-=ÌÃme¢u u6öXÓüx#?8ÁóôèñSû ¸KOÉö%Y?ǾÀ-| |Kï`O'e@ÈgÝwñ/#¿FQ<ÿ Ñø)ëg'ND.ØbÔ'$C×M!R^$ö ÚoÉò"ø,?Ü?¸ä.$§ñ@fX^pIËZFß̺òMÝ®OV 4V ¹3wÝUh.D?®¸«?^Ä<õÞFðÛ^ÅSÔ«ÐHÜóPÿPK rÍb<Èá*®µ¢ß£ª@©~Eå?Ä _ª*qOP zN¹È`BNPe[ò¾Ð"M«lªÖ¢ÊÀAÇúø!Ïq.äHâ\ªâH''±ST âbAºSxÖð> ñá?PK Ųb{Ê«(z)¶¹³§l·ÉÜ&§9'ÅÌëvYµµ^Ó5{¡w¬ ßfð¥¢ÊÐÑt5[«î¨æ²S!K8cʶbjü¿nôÙeÍbÊfI6H®Z%kºe+º)¶aʥ¼^_k°¥øÎã}rÒÕC)¨\S¼AqAÑ`ù¨ îÛ¡æwÁ0ÚOÎ65½·)çha¤ÈöQÓ®=GS<í¯bΨuEã5èmJ.É7x&á9H×ð¿"1ý¦d ´¤îº$Ó4L HK¸%>ôKXÆU¼`èn®!D%ô"ZL^·°&a/"m*Jzÿ<ÊÍÕ% È0$ÿïÈfþoâbñ>lª°kY¥JXRí Õ²RKë\T´]WPwQß¹EÙPí²Qdh ên ÙÅÈM¨X«Vi¿ªT]ªfÔ¾¦ï×l$nÿßüP³júñÔεöù«VSÛÛÐ߸w«lü.RV¸E/F wÊøPK ºRõÜgââGå"=à 'ÝãF³ì!¢´&ÄôÏe@JW"R74Ñ)ÇIú*í§»¿·õ%zÓC$K{P#N´Öý'zJ]»Ð 1uiÔ%¥³~ïì]\ÙGïúJèßCú9R÷0P8Àà£'8C(ÄcØçI;ÕcÊ«JÌP5ʪAÜ'eÆä$®b$FSh43Z¢H1ZSpvbòw¼{¡R ¦äìvwTy9aFîUñ-¾SPP0§"y]ø^ÂîJؽî+x ºF*!£À[%pY¥¢+ *( ´¯í¢¹8æØk[6<Ç8YÑëénÓ®¹T2 /ôÙæeÂqó¦ké%ëîY5½egQàhGÁ}4JúÚZDôID_ÑWÃ¥=äbLnàÎüSÛ[6=ËèØëÅ tîµO.¬Ð¹jÙçS5ý³1g¶e¹òêéNë%ZÇÐK³:¥q^1 þ:B¬®¯æ#©Ì¦4zY¸*p(YG^ë YsN¾l,9 ;:"!"Ú5)xËd·v¸nkÖZÚ"D·) ôë-/}ó?¾ZN>¢ý<È`Å0%áþ· 4±Ñ å=ײ#ý ¨i}X wïBÎñ&²]£³iýLsWSÞ)»9aÉk¬#%÷iXŨ@÷û¢ t óîÆÍ¥ c¾5Á\çÔ¢`N@Ä×ÿPK OÇf5Ìi×Ñou¤ðRßWØ*DAâ@ªn®ËéjÕµW7¥å/HÃ]8_Ø4·Í\Õt*9O®W©Ê5ta÷©èoÃÌTÍzª¥>bX) @¬´ëøÒ·-Ývlß6«ö/4J,Óâ»ÆCoÁvdq«¶*½%sµJI¢àZfuÙôlun ÿ©6ò¹K>õmס±¬v뾬 DòiJ îp5`õ7lú6Up½JÎeü¬ÛõíÔ}Ó¡¾ëå6=×zbû¹½ +¦µ{¿ AÎÓ|ÖYR´±5ÒJP¤+íÎ|Ïv*#]RÙ³3.0tRQtýywËYk¹gçÊTUhÞª6s Ü-Ïó¶Êà ÷UV,"+pñ¿¸ièRtЬ\o<Ïõ||G>Æy&§Ïìv-»p\©ÞmHÉ nø´)Î*q¶)CÖ@ K~4°ºty·ÈG_-rógµ\4ðZ>Q}'Ki ÇùÿÓ3c¸Þày¯»^Ѭ±tzErJëu³ÒÑk²§ºµ¾wg%ÑkG~·v¥s\>ô{N ^þ´eÑ_;Ýpú±rä\;éÒç>Sø±m÷ ¡éÎ1Zéu6\âSiøbêªñø ö¨zrªF¢îÔïõ,6ÏxúqÀüD^ã^B;xIDÃ!V½þ½Ó0Ê/¡?GÒ>â/ÕW$¼3Ï/ü¾òèúÿÙ£Õna½´:D»Cd.Sú9T§cú1"FÇUÌñÙ¿LÄYâó|Íq 6L¯|¼núº@ò59@âÑ?ÜUT ¹~Åõ:ºA#7[¦yÄ ñ -|SéÂÕ¦i*Ô £=Ue~G¡ýí8<Í@+º3Ì6p<¸Ó¢K¶"¡É&qTÍ-u®È{.aºA¨<ºðN58¬RO#HÒ-Ûõ¦/ãø{£²QT×Á@Ïjj/Hä±1ºäíÆ¿PK rm;Ü^A8o9¾°|éåøB:/Ûv^ðZ»$g¤ÂýtÚu´ÈeH¥;RÈTÄß©¤¨Ë½FͧI³*7ÚÏ}W83BÛ3ãÿn¤¿,Îúóm×U Aä´*H*^ ׿ËBU'uNêy áû0ÌóFOBJ2zÆ7A®+]0g ój0Ð$C¿:2ß^`×`XÀCxD7~`1L?µÖÍ fUp×ríêÎY¦#)¯ ˬ[.w|ºª¹ÿïÄ×aû§DµAÛnÉÚ¢êêÔ5¯¸çYZô§3g]ÇÀYWO]ÞÏGÉ_våBèì²·ÝÄ4£ÝäïKw¶Æè&è=3ÄTÉÉöA}aÑ=Ð8¼vF?ÐÝCô3MB¸Dc4pê¢Ñhà2ÉÆq#Ã,Dv6[üí=ÉØ>â«_¡}B<¹oÐ?bÌ bîèϯ«Éî=\<ÌíS h"²Q"¹N "¡¢lRà*å Î(2È ÖJH©%$ÝÛ- ¼J¤=tâ#$?t*µ¡cì(%8ñÀ$öÙf¥è7ÿPK ¡Æå=DzKÄ%í1\rÂ[U{³1uà`T^¼)+U§È,Ù XÓõÒ2DŬçdèÿ_-;\r¢æ´À·|'Çx©#9¹ôèÇCûÅVé¸.èªi ¦ÏÀªXÔ±W´¨þý«g§sYÿ5ÃèU_aòª!s¦+¥x¡yêpræaZ{+ÜuÍRvΪû2YÒ{ÌJ $íñß÷´Â½²ØdèkpøV ÃÇ(]ï¿0R¢eï·Ädz¸YÄoMJ½·1vì}ùW#ƸG!J£!,_önÈ_N¤ Z{ékFKv%:òNÜ U«Y¯£ ÆHb¾nâV-"¥C9H¸[Ïuµæ5uµ|E¸L~¢qRAûH´ízá#´wPÈ?Ƶ÷Ù/¨tûwJ9ò¨¨Oá:QQOñ"pFcè§ëIÿ©:¡°+aFâ$hòLRÇ Å¯¢Kê5¥ó<·qÕ¬QÜÇÚý¶1×ø PK ?iô¾Âu7t3 [bÓyÜV± âg Yü¢aÂãØqWEIÅ2Ãé8e¼Ì·k¸.ñ°á1cºuÃçëÈ6à 79C6æ3çA@¦¼%> ÂP40¤+ݰÁCÛbùØ^!"^t7a%ô¹¹Á Ù®Ú¦cÿC4]ã«Ä9çÑ¢·d»¼ÜܨqŬ9äJ¤ÀY5}[¬[ £_>Þímo¶çRÉYýÃÀx Øf8{ÜPö¯é®Åõ%¶/ª´EeHÍZNK»Vñ¾ÅlQáR"eÎ|aäÈ¥ìI§y¾9ù¾çëø¿éø¿ë8a£8ÅpRl*Ú^±mt\ÄÙ¶ ¥8Ó".¶à VTü¡c÷ú;L û°ÉË_."å?ÅcLÇ8¥ãÆ®üÙ`è;> ?é (GºîùesiuNÇ5ÌzÛv<ßiºhƳ´wÓú|íàÈßèàû ý|êb8ñ1C&àáMË¢|myBñû"qÒïmL9*ctW < @]¢ôNm«ÑتèÏÒj*}Î.oÐØ ú½¹Ô>ÒÕ§P IHNë~j×.taÌDF]õJUéïá§â+©ì¡÷ 2w_ [|ÜëbLâ!LôÑÅ}ØG( Ð<Ã$M5Rõi)U§]5¤q_ÑÑÄ·4,Q½3½rê?ì#¿C@<G VÈ9MNáDÀÁh&0)Åc Ã.È²Ñ #AQ¦?áÜû·ô]Õ©=(ÏÐýZO¡²&Z|Ir$ÑÀ%æ0o¤à¨1qZÚ©=ª¶#ë£ç)èÛ÷PK n2Lhaáè ¶¬C®·Êp÷¿Æ°ö/ü(åh"·O [ípIRóMV=u#8Zl=ñ0äGj Äm{Û¦»®o×8(8^ÛÐ]K¾·ÿS¢SjÕUÓ«:;÷÷ óg96½ªUX*8n%çPªmÖzÎbJºíY:ÊÕv®Ô°ùùr]^É<TOuÈ=¶I×uqñZ Rß®6Óûmó©Ë0¥=3¼|8 Á#~=RA[KkÙù.5 í߸rz¢èxy§a·yÚ¿.Ýï`PKNÃ5̼%Kêå]V2(ØÐð%ÞHö -0,ltÏÜõA®ë¸¾BYÃ6åeKÁ×¾Á·&qYà¼\³¾{nȸ74|ïY¾}Ä®/Ì-ë¶íxÉ]ËÞIÿ3¹ËÿiStlkÇCÃèÛ Î:kÈbS]jMãÚ{xíõÓ DºQXü½Þ²0(ùAêcÚ)â§¼PèLQßcæjÅôVÍz]¯tôûI wkg}iy8s¿ºO1V¯:È¥mÛófº³qfzÜÔ¼ãL`5ëGݯæÃÎc°iï gꦷd´Þj¢áô¦tójºK+v= F¢×«®óTÇ,;o_*7ùåJÈFç7-*7$Ç¿>>Má ¯oñíÂ8ÇûJæc(«¿ úâØ1Ôò¯>C#â%ú¡!~;üåDüç_d®ÍÎbèw$2¿!>Ä IE iPÀ4ßF×åÌ8çDnQÈeäLuR2P¹æ*ñEäLSôJ/¹1käN1 9¦'ÓÉò³í§³É÷'QõÅCÿTxKåÙ#¾ èF=¾ºAâÁ(ùÈjj ñ9F×ø¨<¿8'ã[qc ¯<{ðÎù1¤©¡VHsdü;Âh7«Mà]¼Ç»_÷y áPK ¾Uð« ædTĤK×zð½|.Èîºü BÁ¢¼ÃTÜIJù¼¥`UÁÜf|ê?X² ë9¾éÙÃÙìã¡QÐ~X⦧2Ç®YÂòN¦B¾K%Ãu3ÓÛÑ%û3d-ÁsþÓ}îlû%²Ä³¶i¶ Çï5#£6ÂÉÙyß,®s¯h,ÿbò²gÙ²F½¢å2ä²¶SÐíý'\p×ru³⦻¾Ðó¾Ø¬Ò¦¸Cr~ç²dýjHÛZ("À}Q& MKa¶ø/È. »HNc )LÿA²&wîxuú÷ þ¼JÑäRâé± Z¶éÒ©1,·}Çä+TöâgIq^"jCVÁº6ü¤á6iãöÔQ×° iÝö!Y¿eFa ÜËÕÚ¼58-.u4Þ¶0èSæ :ûJj !C?ÕÔ¥Tóéî|Éå2³©æÅL{u®{gW-¥^¥RoHû:¶oû¹Ü`ê]!¡Õ¬ØNÝF3ÜiÞ·tl¼C˽E.<× îýhjWrJµ(´w&è[6jqY«ôÐxãÔ¡·q~ÀæÌXú5"ë¯Ñe#ZA÷|ô7LÍw¿ ²ó=Ôb;GPÓôƵ ú*è?ÂÀÿ53¡Á?y 8 O¼¤}ð#8K9f R?(ñ>²uçèmÅÎÓõ©#I9FsÔº%G|I }¯?FþS4Ö2RÑEÂ<MY]=³µuîÒL IVw²S¿gåÂÒ?y½Ð¨qí'Ðß ûJÀ'ä¹À?QãóÔUPK Â0çÕÚj¢«@Ð9@w tá b%¥$ÐD½à¡Ä¨âÛ<áûÛýrÀÆÆH©ç¶k! ÓÙ¶â'Îj®K¶ª¹µù¼ûJ &¥tOÊ)îLSˬiJf<¥¥U©òu-^ì̱rj¿fT¼ÉEk&dߺOMÿ 8Á¾ÒGóHÀNZ¡I[èZQ1䱤Ò2ÓÂ/à+)Τ̾eÅpWqÒNýeµ{÷ÞsÏÞ=wõîýßÿ f ç· æ0/%7dÜqKÆmaXp)ãN wQN¡% Ëâûï%ܰ »^{Fíwe§Q+8Õ'm¸¦[hím×ã¶grÏi¬DÆ"ÃÎõ-a¸üÿʾgZ ¯ÓNòiÞ5l_Ó«³¶±äoWÆ}^µÈ.;:·VyÃëÈð¶La²'Írk6Ï]]êǺ "û®Q OÈÖié9´oÚ5ìtxdÛµBh¥$)ÛxÂés6ÛåS²¸ë»£CݪhñgÏp'[Íðº .o2Ì»ÿpfWH¨ ÕnBß Ð4m«ÐDÄ%\Vq?IøYÅ#\ðXÅ/àÔ,}ULE:ÃÿP)Ã^u0ýK K]ìm¶Àµ>:®¸ÝDÉí{_èìDá\ö`¶C Äëâgqÿ_ 4 M{Ù&Àf"j¡¾ÂÅv1cAR9]gè (v3Õ>Kþ¦3A)©}#°çQ1K!½²¶Ñ^ eÚÅXo1^Éïa²³_iíçwñqóStoÀm¨Àw(Ñ]¢P¦¤ú//wºÔ&WÈ¡ÏðyPØ/Ä/? ;Rûa?BzTVò³%2$$+k£1?Rªp^ª<®¥fÃR/è$ì_â/Q%²`r_~yÎÏHT!IæÂJ+Ègâ§HBÉ"ùîù²ô ÒI`îT``h4 óPK ¢¨ìx®^<ñ ÑÄd£Ü 6P»I[Lô¯<hâøQÆWX±N_»3ó^û>¿Þ> uÇ»#:)qÚ\I»OÓf 5Ã~«~w"ZêàvµÑGòE¨k!;Ö¢É{³×Ǫ'®¤õ+/Pùg8ùBÅè?s¢ú×6<2Xµÿ9¸ÈZسPa¨þY*¿sÁ5yTÔ²¨½óñÿ$ôN¨b ÚdGG \¥Ý)ÜÁ;Øý© ×)Ë#ôh6°MÄqéËÓj}ÖKò±ÜüÜÇ ýÛ¨BBjT#( µYMñPK ¡aQ!£©}PK 0h0l4yµ6aJv¨Ý U|å~eÙ3D¬3}ºûLwÏì¯ß?~pð2,îpä3(`q#X⸫ñGQ£Ãq_ã2ÇÓxÆã40¤·jÕwå»Òö|§ã-ÇSQ¶VF6d+?Tu¿ÓOÞ¸»ÏhãíºÏ2õíõRÍ+W]$£ìnV²õûºZ;v¥¾EAîÚv¸Õ Ô+RËêÉ ¹'F+A(Ü^·!¢¿Ñº:Ùô;u? ´Ý'ês3,WdÔrd£-B±«ÈW¢uè¬û±(ÕøJF^ßAñÕf§rƽ¨)6-9wQNQOÇ®1Lè}1êQHWD2Lã ¬ZÂ8ebºÅ ü$-\ÕÜè_®baZÓÙc:Ü S¡ßf5çüg£cÇZ¥¼¦bXº@ä|õÒÍ.=× f*Û"ÍÜ[©¼}©NáÆJt[B½ä¾I,äÏ>ÂY*9Oo38µ;qÚÛôƸDöÄ û2Ù'ì+dÓÔi?«'mpº3}5 ºCZ¯¿Ñ.~ûbÜ9ZSä§Õ: À Ü4ÜÉ(Øïø¤=h0e§ r{È`Æ6hé9`Aqª|*¢rô1Ü6E,üPK Â0µUOzô`Ð zèÖKJH _óà|Ø¢`÷03ÌÌ>·; R*B¸£"»*ÆÄu|Å×*Íó2lAÁ¢{ TCZËQ¬Èù¾VUh2÷,Ödî7QdT¬#+rQ|«à;cØ"¯`SÅl(x â 2ëã$v_¼is£Î¥ºÉ0v½nXU}QÆ¥ó{[3]^fÜáwÓáÉ©ÃÀ¢Ø¦¬¡·Ìls·dÚ>N,#ÊF½`6=wn;·3®ꢴcZ¦ÃÝqmÃ5«{ú*ܪ®ZkX.7\aç;~¢2lO®\ aa²óTWHÑsd.»A¤¶× _ ( JÚ«Mèé,Ãx·#+ÜeÑ´¶ÍË åEÞ²ô 2¨yÑ´Ëæ2%Þ"BR(ø^CT:þ¶ÊWÿÉ /èYñl[Øá âG9|¤áPÿ#2)ÉE2x<4ÜÄ¬Çø W8÷f(ìsãʺA@Èh·ÍJÅ$N[øv;n 7îc°CCÉg\Ö°[Ú¡ÄïSpPTU 5éÏ&çîr¦¥çÖìÜGÉ-¨½¬ÅiV²âu^ªwR§ R¾²¸v"Cúìáðrç(¦±ëmÚqÏþßbÐOH\0³ÆP×cP*ÂλtZÕªé®cTéadrªßñ¾Ðï*Ñ»ã<wæW-¹±Ë¶Ø½WùÝJ£Ñ0mA¿¯Pª·¦R]á}.qWxÔ¾ áR0s³f'¤G;ºVXßÊί/QÝP$)h»ÎCîÖNèúQ ¡°´_Íeû÷\ ·ùuú !Þ´YR+ÕÒù{lv¶ta"mZeÅ,nkfë¶b;êhåªw6VÛQ GWÓÊ×ñC¡½ne7émõªTT£¬$*ªmÇ'õ%¸ä4ªÄxIÕª¬ç7wÒyéCçÔâ<W0$cäUü˦ß1qHÈXä1O8¥ö/¨ÑÞ5ü®6îÅåÄ^HÆf/`o[fé î(«9w GÃ2îþ2R¼±Ä\d*®¯¹×OkeµT=¾ ´yì¯èÅri!t%(KÕãìù¿MNÛ¬ÐgÔM#¥?±èÿFA9° ÚÚÙqµ°ö<_Kò)?JÐ2ÍM÷IN t,Ç~¢;[}Ó¬à3J"ÙB2_ÉfzÏnºo df1;Ê´Ieq®ñ øÓÆçìU÷Ï@Ö±°OnøÙVôá:Yù0~ùøY'ÿò÷ûhòz>£ù|ûhñ¶ºî§ã÷x¸ÍÅrGa¹Û÷8&»ØÒ>:¼ä~ÄÜ>º¾a¬·Ûur·Çùkðrê%W¹÷·\Çú÷jðqçòÞn¦ÑAvíTy?F¨«Q!)ñ~ +të`QT1·Å;ÄÝîû;¬wϽÜrí¶«?úPK þåûßæÏ_PK ) --- NEW FILE: cglib-nodep-2.2_beta1.jar --- PK H ¥zØ9kcõ¿ùĸѩ%ÃZ箬ÄÊ~Å/]LdP+ÙkÞýH±§[ò5ï.ðnÜÇà ¤VνÖtVÅ_:¼¢ÑÓ±o°¬6éãVáM±ÓÃÚo伯eI¶£ÝøOVn2}²Õ,l3ãÛ8q¦ÏýZ³S¶-¬EbèÞÿ»µõ齸ÿkÁìåJéd7Öë Z%vkÅðÁ7hg§É±°Í,l%·Ö[ÚªÕ-TºU¶¦½Ï¾yñs>Ï@E^ûi§qptO±¬rqKì¹T=Qkt²}!iiúÍ8gXMÿ²³óÒúøó v³¢ô¸zÄÚ,}£c÷gó!ÁÖ9áuw8°FL"Þ6N·µªUÖbþkËÿ@lL£q?ÉQ,ûºY!JÑAtz£I ¯#Þ¯^2nrpWÑVS/Üu§À=ðxrë ¨áºÜmäy£-ŰßNïþÞØG@±ÃCáü.îãUr@x»mdtyºË.bBWá,yc-[Éõ ¼`ÏëokV®Ê>¬¦(oÜãwPr³ÅÙX Ü×ûôêåv«pö#¢«3»óRWÊêhóA ÒúsZAq+¯(üR:²bÏÁÙÐ!p$atBc·ÖõºDXm@@°Zõ Ù¦äÓÐO¡ gcãoØ#Ø»®¸åAåà4lãLÇ1uz¥{slûc¤NðÕN ¡*$Ï&äýCF±j#uXµ]tÃ7Ù(«º=¢ÿÀÊ[ÂmÈaz¹QçÑøèd[Ys©Ê$4{$iH¶´þ+ÂùÀNZþ0 RG&5 æUVéjp9pØ®z2Me8+OÁY* ¤îhuí|Û»AmÜÚGEÉ¥æ^ñ^@yÑsDÊJÍW%¬L¡P9é¸ó ô8YxÑ]¨Õêl¢}¼Y´Ê9-öñ|mêVÅR6DM,Mr¼ tϯdÃä3ÒEZ×àiô¤blG%f¡áëq«ÊFÓ¾ûvÀlÔÿL!ê 6È!~ÓF ¬qO²'çÂ~n+9sßù4]Çú>P¦ÞTQÀ÷,¹JÝÏøÊÓð%§M©ü_±Nßèððº8ܪ!WE¢]ô¸¢P7,ÏNgfç¨(ærö¬·W"U=vÈ.è['$:ÂZúÉ,ÏÃjÜÅk`¤ º))ÕÇ ´æ/sÍU×%_e#Y}¶¸¹¿º! Ö;Eb8XzyTo0#ý²Ùʽbé*aKÙp=PT.a¤Nr¹O@;ƾEõ9Ú-÷9èÚe·Ã& ±ÉH ¬É c_FAe2+<kiê_îI)¾+~ânHv´n3úPN]åy|±Õ UËȾY¨(Nhª=f(½É°£mÑ=÷ÉB=õüPqûP%ìýÚpj't]¯ÅSçG®}Ç"Ql?¤"þm©P*]³Ü&J´ô9AQy8Xcr-.ŨKÒ4ªoÆM$¹ÏHãÇhÔ#c-Ç^Tq2°¸÷ bËs;9¢WÎÇg$'kf¹<ð,á VZv )Ŧ.&;aÅ'HÑ.<1¦òûã)Ó§*b¨åZsÿ ¦lø¥¸â éì²CE8MÒtâéÔªfîM5íð¤ç z8°Ë7\% ¯u3gtâ],ëØvêgÕ hÞ³ÇäNÉþtݱ¢-öÑVXQÐ]!Oewû¿ªê#cAÏñ{xªÛ¤Ù§ß`aZÆEyÆ×sÆ+. )¿°pnDpªQ~ôD1QZ&å o½B©Z¡ä ØhábN=ªº~Æã¤«VÒúQÖaÉFBFâ-îÝÔÁÓôbEê<ÏqÒÄDn¨x5Ò} ÉAøbö/GB'Ée®U¿:Ì«(á;R>ÌÀlhPNò@×`&5.êõ~clEó <q"7DuýåB\iÇeÍ[ñlÊÙ§HÒ.÷¾æêʳØ\öäÎZ ÐÀeiÏH\j=Õ¸åëÔXù:eH³Ë;1¿ï/ïæwIÅïç÷?Þ¼»ï/oo/÷óë;qs[~#póZ\.~/®À´A?RãÕÑ5MÑÍñÄ=X±k2ÕÅ¥=¼ÐèýüþÍuå/ͯo箺^ÜWâ§ëÛW?BÎËïçoæ÷?³/½ß/®ïü×q··0Ü»7·âí»Û·7w×>û9eG\ac5O7x äÊ¿ÙZM|/ÝÂÏèöÄÄE/Öw1q¢'×!ßZ§JÛ£}ór«·óWÃÑÿz'Q±´ìKÝñN©Y$õâwÁ£û¨ÕzÙ¶³3xÒP¶zµê4XZΫ4t¯&âÜGú¤ïy.AN/ù±x+êkäI<t Ï!OéOÇÇÔI^¡O²\§ùèÐX`Ë\M'´<~¿Sp[E3þr ]ß»ÒË}`#Åö¤ ¬ØDþw [ü2I}ùzqEY÷Ô{áË·oñÒü/ÉÜq §@U$ E×ËÙ0ÅÛéÓ^@VvfbþíÐMøÎ/{Ë¿õsÒmLÖq²»Tù3Ï&YA>n8Ï(Lç®á^¨ógA}qî:=¹Y"m½¦©yô<Çüe_Å/,;d=óþirkêIUù5«8£Ò¢çßñ±!xðù-ôé#õ×}¨c3se.$rïÀ,¹''}ÀèÕrÈÞÿ©Ofßñ/î®Aì°èsxýÇHJø:÷):uÇß`Ñ¢|ᣴýäì¬{íÝ)5":=3 8nׯF¸¨²Fø%bl½dﯣþPK:UÛ{ Â@gýI4*úvàÕbg@ vv°HX%_ÍÂð¡ÄÁ-vgaÏÛÀ -BKøÉµDLW{}Ö*Õ«M%Ï~íèË[{òÁÛNYÄ$µAÝ9kñdzIÁºhÆÂ¹2;ÅiªÐF}¸ÁG.ùJèþv ÂjcØzå þß| TPÕUÔ¬ª þÞ<{=K\4ÆPKGþ`º ã¨OÑ{´lÚ³O{Fëæe5>{$Som²tÍ!Á³â@&âÀf}; ÄlE×&=åÐRE¯§î²¨·g¬ÞDÆ]ߪw%4»ß½Î° Ö¾6T"MÖl $S|vò I Øné>Ñ¡;}î6³'Ct¡ÁJ =¾3<ÌN+Ì bv|K·|ßðªïá5ßÇü¯+8 §+hãæ©àGØ àÇø©7¼)ØË¦d~®àø%ùøøþÃhÎWð+þk¼EÕZÀîÅ [...1042 lines suppressed...] Ç1^ µ ù±Ê f" ;b ¶ |
From: David S. <ds...@us...> - 2007-07-02 18:11:08
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/imposterization In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/test/imposterization Added Files: PopperImposterizerTest.java ThrownMatcherTest.java AssumePassingTest.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: PopperImposterizerTest.java --- package org.junit.experimental.theories.test.imposterization; import static org.junit.Assert.assertThat; import java.util.List; import org.hamcrest.Matchers; import org.junit.Test; import org.junit.experimental.imposterization.PopperImposterizer; public class PopperImposterizerTest { @Test public void canWrapImposterizedObjects() { List<?> list= new PopperImposterizer(null).imposterize(List.class); assertThat(new PopperImposterizer(null).imposterize(list.getClass()), Matchers.notNullValue()); } } --- NEW FILE: ThrownMatcherTest.java --- package org.junit.experimental.theories.test.imposterization; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import java.util.ArrayList; import org.junit.Test; import org.junit.experimental.imposterization.ThrownMatcher; import org.junit.experimental.imposterization.ThrownMatcher.IncorrectThrownException; import org.junit.experimental.theories.runner.api.Theories; import org.junit.runner.RunWith; @RunWith(Theories.class) public class ThrownMatcherTest { @Test public void assertThrownVerifiesExceptionThrown() throws Exception { ArithmeticException ae= new ArithmeticException(); try { ThrownMatcher.assertThrownException(is(ae)).when( new ArrayList<String>()).get(0); fail("should have thrown exception"); } catch (IncorrectThrownException e) { assertThat(e.getMessage(), containsString(ae.toString())); } } @Test public void assertThrownVerifiesExceptionThrownWithRequirements() throws Exception { ArithmeticException ae= new ArithmeticException(); try { ThrownMatcher.assertThrownException(is(ae)).when( new ArrayList<String>()).get(0); fail("should have thrown exception"); } catch (IncorrectThrownException e) { assertThat(e.getMessage(), containsString(ae.toString())); } } public static class ExceptionThrowing { public static Throwable EXCEPTION= new NullPointerException(); public void liveDangerously() throws Throwable { throw EXCEPTION; } } @Test public void stackTraceOnAssertThrown() { try { ThrownMatcher.assertThrownException(is(new RuntimeException())) .when(new ExceptionThrowing()).liveDangerously(); fail("should have thrown exception"); } catch (Throwable e) { assertThat(e.getCause(), is(ExceptionThrowing.EXCEPTION)); } } } --- NEW FILE: AssumePassingTest.java --- package org.junit.experimental.theories.test.imposterization; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import static org.junit.experimental.imposterization.AssumePassing.assumePasses; import java.util.List; import org.hamcrest.Matchers; import org.junit.Test; import org.junit.Assume.AssumptionViolatedException; import org.junit.experimental.imposterization.AssumePassing; import org.junit.experimental.theories.runner.api.Theories; import org.junit.runner.JUnitCore; import org.junit.runner.RunWith; import org.junit.runner.notification.Failure; @RunWith(Theories.class) public class AssumePassingTest { public static class OnlyIfPassingButDoesnt { @Test public void failing() { fail(); } @SuppressWarnings("deprecation") @Test public void willIgnore() { ((OnlyIfPassingButDoesnt) AssumePassing.assumePasses(this .getClass())).failing(); fail(); } } @Test public void onlyIfPassingButDoesnt() { assertThat(onlyIfPassingFailures().size(), is(1)); } @SuppressWarnings("unchecked") @Test public void removedParameterizedFailureWhenZeroParams() { assertThat(onlyIfPassingFailures().get(0).getException(), Matchers .is(AssertionError.class)); } private List<Failure> onlyIfPassingFailures() { return JUnitCore.runClasses(OnlyIfPassingButDoesnt.class).getFailures(); } @RunWith(Theories.class) public static class OnlyIfPassesAndDoes { @Test public void passing() { } @SuppressWarnings("deprecation") @Test public void wontIgnore() { assumePasses(OnlyIfPassesAndDoes.class).passing(); fail(); } } @Test public void onlyIfPassesAndDoes() { assertThat(JUnitCore.runClasses(OnlyIfPassesAndDoes.class) .getFailures().size(), is(1)); } @RunWith(Theories.class) public static class OnlyIfPassesWithInvalidTheory { @Test public void throwsInvalidTheory() { throw new AssumptionViolatedException(null, is("a")); } @SuppressWarnings("deprecation") @Test public void wontIgnore() { assumePasses(OnlyIfPassesWithInvalidTheory.class) .throwsInvalidTheory(); } } @Test public void onlyIfPassesWithInvalidTheory() { assertThat(JUnitCore.runClasses(OnlyIfPassesWithInvalidTheory.class) .getIgnoreCount(), is(0)); } } |
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/matchers/api In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/matchers/api Added Files: MethodNamedMatcher.java CamelCaseName.java ClassNamedMatcher.java StackTrace.java Each.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: MethodNamedMatcher.java --- package org.junit.experimental.theories.matchers.api; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; public abstract class MethodNamedMatcher<T> extends BaseMatcher<T> { private StackTrace constructionStackTrace; public MethodNamedMatcher() { this.constructionStackTrace = StackTrace.create(); } public void describeTo(Description description) { description.appendText(new CamelCaseName(constructionStackTrace .factoryMethodName()).asNaturalLanguage()); } } --- NEW FILE: CamelCaseName.java --- /** * */ package org.junit.experimental.theories.matchers.api; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CamelCaseName { private static final Pattern PATTERN = Pattern.compile("([A-Za-z][a-z]*)"); private final String methodName; public CamelCaseName(String methodName) { this.methodName = methodName; } public String asNaturalLanguage() { String description = ""; Matcher matcher = PATTERN.matcher(methodName); while (matcher.find()) description += " " + matcher.group().toLowerCase(); return description.substring(1); } } --- NEW FILE: ClassNamedMatcher.java --- package org.junit.experimental.theories.matchers.api; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; public abstract class ClassNamedMatcher<T> extends BaseMatcher<T> { public void describeTo(Description description) { description.appendText(new CamelCaseName(getClass().getSimpleName()) .asNaturalLanguage()); } } --- NEW FILE: StackTrace.java --- /** * */ package org.junit.experimental.theories.matchers.api; public class StackTrace { public static StackTrace create() { return new StackTrace(new RuntimeException()); } private final StackTraceElement[] stackTrace; private StackTrace(Throwable e) { this.stackTrace = e.getStackTrace(); } public String factoryMethodName() { return nameOfMethodThatCalledMostRecentConstructor(); } private String nameOfMethodThatCalledMostRecentConstructor() { boolean initSeen = false; for (StackTraceElement element : getElements()) { if (element.getMethodName().equals("<init>")) initSeen = true; else if (initSeen) return element.getMethodName(); } return null; } public StackTraceElement[] getElements() { return stackTrace; } } --- NEW FILE: Each.java --- package org.junit.experimental.theories.matchers.api; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.Matchers.hasItem; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Matcher; public class Each { public static <T> Matcher<Iterable<T>> each(final Matcher<T> individual) { final Matcher<Iterable<T>> allItemsAre = not(hasItem(not(individual))); return new BaseMatcher<Iterable<T>>() { public boolean matches(Object item) { return allItemsAre.matches(item); } public void describeTo(Description description) { description.appendText("each "); individual.describeTo(description); } }; } } |
From: David S. <ds...@us...> - 2007-07-02 18:11:06
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/methods/api In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/methods/api Added Files: Theory.java DataPoint.java TestedOn.java ParameterSupplier.java ParametersSuppliedBy.java TestedOnSupplier.java ParameterSignature.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: Theory.java --- /** * */ package org.junit.experimental.theories.methods.api; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Theory { boolean nullsAccepted() default true; } --- NEW FILE: DataPoint.java --- package org.junit.experimental.theories.methods.api; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface DataPoint { } --- NEW FILE: TestedOn.java --- package org.junit.experimental.theories.methods.api; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @ParametersSuppliedBy(TestedOnSupplier.class) @Retention(RetentionPolicy.RUNTIME) public @interface TestedOn { int[] ints(); } --- NEW FILE: ParameterSupplier.java --- package org.junit.experimental.theories.methods.api; import java.util.List; public abstract class ParameterSupplier { public abstract List<?> getValues(Object test, ParameterSignature sig); } --- NEW FILE: ParametersSuppliedBy.java --- package org.junit.experimental.theories.methods.api; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface ParametersSuppliedBy { Class<? extends ParameterSupplier> value(); } --- NEW FILE: TestedOnSupplier.java --- package org.junit.experimental.theories.methods.api; import java.util.ArrayList; import java.util.List; public class TestedOnSupplier extends ParameterSupplier { @Override public List<Object> getValues(Object test, ParameterSignature sig) { ArrayList<Object> list = new ArrayList<Object>(); TestedOn testedOn = (TestedOn) sig.getSupplierAnnotation(); int[] ints = testedOn.ints(); for (int i : ints) { list.add(i); } return list; } } --- NEW FILE: ParameterSignature.java --- /** * */ package org.junit.experimental.theories.methods.api; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; public class ParameterSignature { public static ArrayList<ParameterSignature> signatures(Method method) { ArrayList<ParameterSignature> sigs = new ArrayList<ParameterSignature>(); for (int i = 0; i < method.getParameterTypes().length; i++) { sigs.add(new ParameterSignature(method.getParameterTypes()[i], method.getParameterAnnotations()[i])); } return sigs; } private final Class<?> type; private final Annotation[] annotations; private ParameterSignature(Class<?> type, Annotation[] annotations) { this.type = type; this.annotations = annotations; } public Annotation getSupplierAnnotation() { for (Annotation annotation : annotations) { if (getSupplier(annotation) != null) return annotation; } return null; } public ParametersSuppliedBy getSupplier(Annotation annotation) { return annotation.annotationType().getAnnotation( ParametersSuppliedBy.class); } public boolean canAcceptField(Field field) { return type.isAssignableFrom(field.getType()); } public boolean canAcceptMethod(Method method) { return method.isAnnotationPresent(DataPoint.class) && type.isAssignableFrom(method.getReturnType()); } } |
From: David S. <ds...@us...> - 2007-07-02 18:11:03
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/results In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/results Added Files: PrintableResult.java ResultMatchers.java FailureList.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: PrintableResult.java --- /** * */ package org.junit.experimental.results; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.List; import org.junit.internal.TextListener; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; @SuppressWarnings("restriction") public class PrintableResult { public static PrintableResult testResult(Class<?> type) { return new PrintableResult(type); } private Result result; public PrintableResult(List<Failure> failures) { this(new FailureList(failures).result()); } public PrintableResult(Result result) { this.result = result; } public PrintableResult(Class<?> type) { this(JUnitCore.runClasses(type)); } @Override public String toString() { if (result.getFailureCount() == 0) return "PASSED!"; ByteArrayOutputStream stream = new ByteArrayOutputStream(); new TextListener(new PrintStream(stream)).testRunFinished(result); return stream.toString(); } public List<Failure> getFailures() { return result.getFailures(); } } --- NEW FILE: ResultMatchers.java --- package org.junit.experimental.results; import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasToString; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Matcher; public class ResultMatchers { public static Matcher<PrintableResult> isSuccessful() { return failureCountIs(0); } public static Matcher<PrintableResult> failureCountIs(final int count) { return new BaseMatcher<PrintableResult>() { public boolean matches(Object item) { return ((PrintableResult) item).getFailures().size() == count; } public void describeTo(Description description) { description.appendText("has " + count + " failures"); } }; } @SuppressWarnings("unchecked") public static Matcher<Object> hasSingleFailureContaining(String string) { return allOf(hasToString(containsString(string)), failureCountIs(1)); } } --- NEW FILE: FailureList.java --- /** * */ package org.junit.experimental.results; import java.util.List; import org.junit.runner.Result; import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunListener; final class FailureList { private final List<Failure> failures; FailureList(List<Failure> failures) { this.failures = failures; } public Result result() { Result result = new Result(); RunListener listener = result.createListener(); for (Failure failure : failures) { try { listener.testFailure(failure); } catch (Exception e) { throw new RuntimeException("I can't believe this happened"); } } return result; } } |
From: David S. <ds...@us...> - 2007-07-02 18:11:02
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/results In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/test/results Added Files: PrintableResultTest.java ResultMatchersTest.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: PrintableResultTest.java --- package org.junit.experimental.theories.test.results; import static java.util.Arrays.asList; import static org.hamcrest.Matchers.allOf; import static org.junit.Assert.assertThat; import java.util.Arrays; import org.hamcrest.Matchers; import org.junit.experimental.results.PrintableResult; import org.junit.experimental.theories.methods.api.Theory; import org.junit.experimental.theories.runner.api.Theories; import org.junit.runner.Description; import org.junit.runner.RunWith; import org.junit.runner.notification.Failure; @RunWith(Theories.class) public class PrintableResultTest { @SuppressWarnings("unchecked") @Theory(nullsAccepted= false) public void backTraceHasGoodToString(String descriptionName, final String stackTraceClassName) { Failure failure= new Failure(Description .createSuiteDescription(descriptionName), new Throwable() { private static final long serialVersionUID= 1L; @Override public StackTraceElement[] getStackTrace() { return new StackTraceElement[] { new StackTraceElement( stackTraceClassName, "methodName", "fileName", 1) }; } }); assertThat(new PrintableResult(asList(failure)).toString(), allOf( Matchers.containsString(descriptionName), Matchers .containsString(stackTraceClassName))); } public static String SHELL_POINT= "Shell Point"; @Theory public void includeMultipleFailures(String secondExceptionName) { PrintableResult backtrace= new PrintableResult(Arrays.asList( new Failure(Description.createSuiteDescription("firstName"), new RuntimeException("firstException")), new Failure( Description.createSuiteDescription("secondName"), new RuntimeException(secondExceptionName)))); assertThat(backtrace.toString(), Matchers .containsString(secondExceptionName)); } } --- NEW FILE: ResultMatchersTest.java --- package org.junit.experimental.theories.test.results; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.hasToString; import static org.junit.Assert.assertThat; import org.hamcrest.Matchers; import org.junit.Test; import org.junit.experimental.results.ResultMatchers; import org.junit.experimental.theories.methods.api.Theory; public class ResultMatchersTest { @Test public void hasFailuresHasGoodDescription() { assertThat(ResultMatchers.failureCountIs(3).toString(), is("has 3 failures")); } @Theory public void hasFailuresDescriptionReflectsInput(int i) { assertThat(ResultMatchers.failureCountIs(i).toString(), hasToString(Matchers.containsString("" + i))); } } |
From: David S. <ds...@us...> - 2007-07-02 18:11:02
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/javamodel In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27902/src/org/junit/experimental/theories/test/javamodel Added Files: ConcreteFunctionTest.java FunctionTest.java Log Message: - The hamcrest-core-1.1 library is now included in the JUnit distribution. For more hamcrest matchers, see the hamcrest-library jar from http://code.google.com/p/hamcrest - The Popper Theory runner (http://popper.tigris.org) has been absorbed into the JUnit project, under the package name org.junit.experimental.theories - Several additional libraries used in the theories tests have been added in a new testlib directory - New "assertThat" statement to work with hamcrest matchers: // same as assertEquals(3, x) assertThat(x, is(3)); // same as assertNull(y) assertThat(y, nullValue()); - New feature: assumeThat. A failed assumption will cause the test to pass, without further execution. (The behavior of assumeThat may change in the future to allow richer reporting of tests that are skipped because of failed assumptions) // pass on any non-Windows system @Test public void getRootDrive() { assumeThat(getOsString(), is("Windows")); getFile("C:\"); // ... } - Convenience assumption functions: // none of these are null assumeNotNull(a, b, c); assumeTrue(everythingOk()); try { getDatabaseConnection(); } catch (Exception e) { assumeNoException(e); } - Documentation fixed for many assertEquals array methods - Two bugs in numeric equality fixed: 1718905: assertEquals does not compare float correctly 1715326: assertEquals does not compare java.math.BigDecimal properly - The protocol for overriding JUnit4ClassRunner has changed again. Please see the source for details. - Extenders can now extend TestMethod to describe the behavior of running methods that do not have a @Test annotation. - Adding Annotations to Description caused a binary compatibility problem with clients compiled on previous JUnit versions. This has been fixed. --- NEW FILE: ConcreteFunctionTest.java --- package org.junit.experimental.theories.test.javamodel; import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.hasToString; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; import static org.junit.Assume.assumeThat; import java.lang.reflect.Method; import org.junit.experimental.theories.javamodel.api.ConcreteFunction; import org.junit.experimental.theories.methods.api.Theory; import org.junit.experimental.theories.runner.api.Theories; import org.junit.runner.RunWith; @RunWith(Theories.class) public class ConcreteFunctionTest { public static Method TO_STRING; public static Method WAIT; static { try { TO_STRING= Object.class.getMethod("toString"); WAIT= Object.class.getMethod("wait"); } catch (Exception e) { e.printStackTrace(); } } public static ConcreteFunction zeroToString1= new ConcreteFunction(0, TO_STRING); public static ConcreteFunction zeroToString2= new ConcreteFunction(0, TO_STRING); public static ConcreteFunction oneToString1= new ConcreteFunction(1, TO_STRING); public static ConcreteFunction oneFinalize= new ConcreteFunction(1, WAIT); public static String ROB_KUTNER= "Rob Kutner"; @Theory public void unequalToStringsMeansFunctionsUnequal(ConcreteFunction a, ConcreteFunction b) { assumeThat(a.toString(), not(b.toString())); assertThat(a, not(b)); } @Theory public void unequalMethodsMeansUnequalFunctions(Method m1, Method m2, Object o) { assumeThat(m1, not(m2)); assertThat(new ConcreteFunction(o, m1), not(new ConcreteFunction(o, m2))); } @Theory public void unequalFunctionsMeanUnequalToStrings(ConcreteFunction a, ConcreteFunction b) { assumeThat(a, not(b)); assertThat(a.toString(), not(b.toString())); } @SuppressWarnings("unchecked") @Theory public void throwsUsefulErrorWhenParameterNumberWrong(String string) throws Throwable { try { new ConcreteFunction(this, TO_STRING).invoke(string); } catch (Exception e) { assertThat(e, allOf(hasToString(containsString(string)), hasToString(containsString(TO_STRING.toString())))); } } } --- NEW FILE: FunctionTest.java --- package org.junit.experimental.theories.test.javamodel; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; import org.junit.Before; import org.junit.Test; import org.junit.experimental.imposterization.FunctionPointer; import org.junit.experimental.theories.methods.api.TestedOn; public class FunctionTest { public static class HasAnnotation { public void something(@TestedOn(ints= { 3 }) int x) { } } FunctionPointer function= FunctionPointer.pointer(); @Before public void functionPoints() { function.calls(new HasAnnotation()).something(4); } @SuppressWarnings("unchecked") @Test public void getSupplierAnnotation() { assertThat(function.signatures().get(0).getSupplierAnnotation(), is(TestedOn.class)); } @Test public void thrownReturnsNullIfNormalReturn() { assertThat(function.exceptionThrown(4), nullValue()); } } |
From: David S. <ds...@us...> - 2007-07-02 18:09:43
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/runner In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/test/runner Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/test/runner added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:43
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/assertion In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/test/assertion Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/test/assertion added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:42
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/matchers In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/test/matchers Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/test/matchers added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:41
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/imposterization In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/test/imposterization Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/test/imposterization added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:41
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/runner/api In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/runner/api Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/runner/api added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:41
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/methods/api In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/methods/api Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/methods/api added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:39
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/results In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/test/results Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/test/results added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:39
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/runner In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/runner Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/runner added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:39
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test/javamodel In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/test/javamodel Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/test/javamodel added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:39
|
Update of /cvsroot/junit/junit/testlib In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/testlib Log Message: Directory /cvsroot/junit/junit/testlib added to the repository |
From: David S. <ds...@us...> - 2007-07-02 18:09:38
|
Update of /cvsroot/junit/junit/src/org/junit/experimental/theories/test In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27695/src/org/junit/experimental/theories/test Log Message: Directory /cvsroot/junit/junit/src/org/junit/experimental/theories/test added to the repository |