You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2011/03/11 18:21:44 UTC

svn commit: r1080681 - /incubator/bval/sandbox/lang3-work/bval-jsr303d/src/test/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagementTest.java

Author: mbenson
Date: Fri Mar 11 17:21:44 2011
New Revision: 1080681

URL: http://svn.apache.org/viewvc?rev=1080681&view=rev
Log:
test caching behavior (tests fail)

Modified:
    incubator/bval/sandbox/lang3-work/bval-jsr303d/src/test/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagementTest.java

Modified: incubator/bval/sandbox/lang3-work/bval-jsr303d/src/test/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagementTest.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303d/src/test/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagementTest.java?rev=1080681&r1=1080680&r2=1080681&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303d/src/test/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagementTest.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303d/src/test/java/org/apache/bval/jsr303/dynamic/DynamicMetaGraphManagementTest.java Fri Mar 11 17:21:44 2011
@@ -21,12 +21,15 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertThat;
 
 import javax.validation.Validation;
+import javax.validation.constraints.NotNull;
 
 import org.apache.bval.jsr303.ApacheValidationProvider;
 import org.apache.bval.jsr303.ApacheValidatorConfiguration;
 import org.apache.bval.jsr303.example.Book;
 import org.apache.bval.model.MetaBean;
 import org.apache.bval.model.MetaProperty;
+import org.apache.commons.proxy2.stub.AnnotationFactory;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -36,6 +39,7 @@ import org.junit.Test;
  * @version $Rev$ $Date$
  */
 public class DynamicMetaGraphManagementTest {
+    private static final NotNull NOT_NULL = AnnotationFactory.INSTANCE.create(NotNull.class);
 
     private DynamicValidatorContext dynamicValidatorContext;
 
@@ -79,4 +83,230 @@ public class DynamicMetaGraphManagementT
             is(MetaProperty.class));
     }
 
+    @Test
+    public void testCachedMetaBean() throws Exception {
+        Buffer<MetaBean> buffer = new Buffer<MetaBean>() {
+            @Override
+            MetaBean read() {
+                return dynamicValidatorContext.readOnly().getMetaBean(Book.class);
+            }
+        };
+        // original:
+        buffer.next().next().same();
+
+        // new feature:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMetaBean(Book.class).putFeature("foo", true);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same feature:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMetaBean(Book.class).putFeature("foo", true);
+
+        buffer.next().same();
+
+        // new constraint:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, NOT_NULL);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same constraint:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, NOT_NULL);
+
+        buffer.next().same();
+    }
+
+    @Test
+    public void testCachedMetaProperty() throws Exception {
+        Buffer<MetaProperty> buffer = new Buffer<MetaProperty>() {
+            @Override
+            MetaProperty read() {
+                return dynamicValidatorContext.readOnly().getMeta(Book.class, "author");
+            }
+        };
+        // original:
+        buffer.next().next().same();
+
+        // new feature:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author").putFeature("foo", true);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same feature:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author").putFeature("foo", true);
+
+        buffer.next().same();
+
+        // new constraint:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author", NOT_NULL);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same constraint:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author", NOT_NULL);
+
+        buffer.next().same();
+    }
+
+    @Test
+    public void testCachedIndexedNestedMetaBean() throws Exception {
+        Buffer<MetaBean> buffer = new Buffer<MetaBean>() {
+            @Override
+            MetaBean read() {
+                return dynamicValidatorContext.readOnly().getMeta(Book.class, "author.addresses[0]");
+            }
+        };
+        // original:
+        buffer.next().next().same();
+
+        // new feature:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author.addresses[0]").putFeature("foo", true);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same feature:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author.addresses[0]").putFeature("foo", true);
+
+        buffer.next().same();
+
+        // new feature, any index:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author.addresses[]").putFeature("bar", false);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same feature, any index:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author.addresses[]").putFeature("bar", false);
+
+        buffer.next().same();
+
+        // new constraint:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author.addresses[0]", NOT_NULL);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same constraint:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author.addresses[0]", NOT_NULL);
+
+        buffer.next().same();
+
+        // new constraint, any index:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author.addresses[]", NOT_NULL);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same constraint, any index:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author.addresses[]", NOT_NULL);
+
+        buffer.next().same();
+    }
+
+    @Test
+    public void testCachedIndexedNestedMetaProperty() throws Exception {
+        Buffer<MetaProperty> buffer = new Buffer<MetaProperty>() {
+
+            @Override
+            MetaProperty read() {
+                return dynamicValidatorContext.readOnly().getMeta(Book.class, "author.addresses[0].city");
+            }
+
+        };
+        // original:
+        buffer.next().next().same();
+
+        // new feature:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author.addresses[0].city").putFeature("foo", true);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same feature:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author.addresses[0].city").putFeature("foo", true);
+
+        buffer.next().same();
+
+        // new feature, any index:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author.addresses[].city").putFeature("bar", false);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same feature, any index:
+        Thread.sleep(1);
+        dynamicValidatorContext.writable().getMeta(Book.class, "author.addresses[].city").putFeature("bar", false);
+
+        buffer.next().same();
+
+        // new constraint:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author.addresses[0].city", NOT_NULL);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same constraint:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author.addresses[0].city", NOT_NULL);
+
+        buffer.next().same();
+
+        // new constraint, any index:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author.addresses[].city", NOT_NULL);
+
+        buffer.next().notSame();
+        buffer.next().same();
+
+        // same constraint, any index:
+        Thread.sleep(1);
+        dynamicValidatorContext.constrain(Book.class, "author.addresses[].city", NOT_NULL);
+
+        buffer.next().same();
+    }
+
+    abstract static class Buffer<T> {
+        T previous;
+        T current;
+
+        abstract T read();
+
+        synchronized Buffer<T> next() {
+            previous = current;
+            current = read();
+            return this;
+        }
+
+        void same() {
+            Assert.assertSame(previous, current);
+        }
+
+        void notSame() {
+            Assert.assertNotSame(previous, current);
+        }
+    }
 }