]> source.dussan.org Git - vaadin-framework.git/commitdiff
Made BeanItemContainerNullValues produce consistent results
authorArtur Signell <artur.signell@itmill.com>
Fri, 10 Sep 2010 12:46:27 +0000 (12:46 +0000)
committerArtur Signell <artur.signell@itmill.com>
Fri, 10 Sep 2010 12:46:27 +0000 (12:46 +0000)
svn changeset:14832/svn branch:6.4

tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerGenerator.java
tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.html
tests/src/com/vaadin/tests/components/beanitemcontainer/BeanItemContainerNullValues.java
tests/src/com/vaadin/tests/util/PortableRandom.java [new file with mode: 0644]

index b68c85902647588efb8ef1ddfdba77dec0a9a687..254779f872c9bc3522c155d8718e944d3ec78f35 100644 (file)
@@ -1,9 +1,9 @@
 package com.vaadin.tests.components.beanitemcontainer;
 
 import java.util.Date;
-import java.util.Random;
 
 import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.tests.util.PortableRandom;
 
 public class BeanItemContainerGenerator {
 
@@ -16,7 +16,7 @@ public class BeanItemContainerGenerator {
 
         BeanItemContainer<TestBean> container = new BeanItemContainer<TestBean>(
                 TestBean.class);
-        Random r = new Random(seed);
+        PortableRandom r = new PortableRandom(seed);
         for (int i = 0; i < size; i++) {
             container.addBean(new TestBean(r));
         }
@@ -45,7 +45,7 @@ public class BeanItemContainerGenerator {
             this.shoesize = shoesize;
         }
 
-        public TestBean(Random r) {
+        public TestBean(PortableRandom r) {
             age = r.nextInt(100) + 5;
             shoesize = r.nextInt(10) + 35;
             name = createRandomString(r, r.nextInt(5) + 5);
@@ -91,7 +91,7 @@ public class BeanItemContainerGenerator {
 
     }
 
-    public static String createRandomString(Random r, int len) {
+    public static String createRandomString(PortableRandom r, int len) {
         StringBuilder b = new StringBuilder();
         for (int i = 0; i < len; i++) {
             b.append((char) (r.nextInt('z' - 'a') + 'a'));
index 002f81a37e34959db4ca997d831e84d3bcd608f6..e40be7dc1511c7db252c2d16522507af94191467 100644 (file)
@@ -3,6 +3,11 @@
        <td>/run/com.vaadin.tests.components.beanitemcontainer.BeanItemContainerNullValues?restartApplication</td>
        <td></td>
 </tr>
+<tr>
+       <td>mouseClick</td>
+       <td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+       <td>85,9</td>
+</tr>
 <tr>
        <td>screenCapture</td>
        <td></td>
        <td></td>
        <td>sort-country-desc</td>
 </tr>
+<!--  Disable sorting -->
 <tr>
        <td>click</td>
        <td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
        <td></td>
 </tr>
+<!--  Try to sort -->
 <tr>
        <td>mouseClick</td>
        <td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[0]/domChild[2]/domChild[1]</td>
        <td>39,8</td>
 </tr>
+<!--  Enable sorting to get the same screenshot as before -->
+<tr>
+       <td>click</td>
+       <td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+       <td></td>
+</tr>
+<tr>
+       <td>mouseClick</td>
+       <td>vaadin=runcomvaadintestscomponentsbeanitemcontainerBeanItemContainerNullValues::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]/domChild[0]/domChild[0]</td>
+       <td>79,4</td>
+</tr>
 <tr>
        <td>screenCapture</td>
        <td></td>
index 87ef5ad71a8da7415ed9933c11f5059022ca5128..9045d1894080b21026388b1f93929a08acc34363 100644 (file)
@@ -24,7 +24,7 @@ public class BeanItemContainerNullValues extends TestBase {
         table = new Table();
         table.setSortDisabled(false);
         table.setContainerDataSource(BeanItemContainerGenerator
-                .createContainer(100));
+                .createContainer(100, 1));
         table.setColumnCollapsingAllowed(true);
 
         Button b = new Button("Disable sorting", new Button.ClickListener() {
diff --git a/tests/src/com/vaadin/tests/util/PortableRandom.java b/tests/src/com/vaadin/tests/util/PortableRandom.java
new file mode 100644 (file)
index 0000000..2e6d7ce
--- /dev/null
@@ -0,0 +1,52 @@
+package com.vaadin.tests.util;\r
+\r
+import java.util.concurrent.atomic.AtomicLong;\r
+\r
+public class PortableRandom {\r
+    private final static long multiplier = 0x5DEECE66DL;\r
+    private final static long addend = 0xBL;\r
+    private final static long mask = (1L << 48) - 1;\r
+    private AtomicLong seed;\r
+\r
+    public PortableRandom(long seed) {\r
+        this.seed = new AtomicLong(0L);\r
+        setSeed(seed);\r
+    }\r
+\r
+    synchronized public void setSeed(long seed) {\r
+        seed = (seed ^ multiplier) & mask;\r
+        this.seed.set(seed);\r
+    }\r
+\r
+    public int nextInt(int n) {\r
+        if (n <= 0) {\r
+            throw new IllegalArgumentException("n must be positive");\r
+        }\r
+\r
+        if ((n & -n) == n) {\r
+            return (int) ((n * (long) next(31)) >> 31);\r
+        }\r
+\r
+        int bits, val;\r
+        do {\r
+            bits = next(31);\r
+            val = bits % n;\r
+        } while (bits - val + (n - 1) < 0);\r
+        return val;\r
+    }\r
+\r
+    protected int next(int bits) {\r
+        long oldseed, nextseed;\r
+        AtomicLong seed = this.seed;\r
+        do {\r
+            oldseed = seed.get();\r
+            nextseed = (oldseed * multiplier + addend) & mask;\r
+        } while (!seed.compareAndSet(oldseed, nextseed));\r
+        return (int) (nextseed >>> (48 - bits));\r
+    }\r
+\r
+    public boolean nextBoolean() {\r
+        return next(1) != 0;\r
+    }\r
+\r
+}
\ No newline at end of file