This is the mail archive of the mauve-discuss@sourceware.org mailing list for the Mauve project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

registerValidation update


Hi,

This updates the ObjectInputStream.registerValidation() test to test
whether it is only called one in the deserialization tree (the this
reference) and whether you can add validators at any time and whether
the priority order is observed.

2005-10-12  Mark Wielaard  <mark@klomp.org>

    * gnu/testlet/java/io/ObjectInputStream/registerValidation.java:
    Check fields and priority order.
    * gnu/testlet/java/io/ObjectInputStream/TestObjectInputValidation.java:
    Add self reference, register multiple times with different priorities,
    add equals().

I am currently testing a patch for GNU Classpath.
David since you wrote the original test you might have seen a real world
program using this feature. If so and this is a Free Software program
could you let me know so I can also test my patch against that.

Thanks,

Mark
Index: gnu/testlet/java/io/ObjectInputStream/TestObjectInputValidation.java
===================================================================
RCS file: /cvs/mauve/mauve/gnu/testlet/java/io/ObjectInputStream/TestObjectInputValidation.java,v
retrieving revision 1.1
diff -u -r1.1 TestObjectInputValidation.java
--- gnu/testlet/java/io/ObjectInputStream/TestObjectInputValidation.java	5 Jul 2005 12:22:39 -0000	1.1
+++ gnu/testlet/java/io/ObjectInputStream/TestObjectInputValidation.java	12 Oct 2005 17:44:08 -0000
@@ -33,32 +33,61 @@
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
+import java.util.ArrayList;
 
 class TestObjectInputValidation implements ObjectInputValidation, Serializable {
-  private boolean validated;
+  ArrayList validated;
   private String name;
+  private int priority;
+  TestObjectInputValidation object;
+
   public TestObjectInputValidation(String name) 
   {      
     this.name = name;
-    this.validated = false;
+    this.priority = 10;
+    this.object = this;
   }
-  public boolean isValidated() 
+
+  // Registers with priority for given object.
+  public TestObjectInputValidation(int priority,
+				   TestObjectInputValidation object)
   {
-    return this.validated;
+    this.priority = priority;
+    this.object = object;
   }
+
   public void validateObject()
   {
-    this.validated = true;
+    if (object.validated == null)
+      object.validated = new ArrayList();
+    object.validated.add(new Integer(priority));
   }
+
   private void writeObject(ObjectOutputStream stream) throws IOException 
   {
     stream.defaultWriteObject();
   }
+
   private void readObject(ObjectInputStream stream) 
       throws IOException, ClassNotFoundException 
   {
-    stream.defaultReadObject();
     stream.registerValidation(this, 10);
+    stream.registerValidation(new TestObjectInputValidation(-10, this), -10);
+    stream.defaultReadObject();
+    stream.registerValidation(this, 12); // Again with other priority
+    stream.registerValidation(new TestObjectInputValidation(-12, this), -12);
+    stream.registerValidation(new TestObjectInputValidation(11, this), 11);
   }
 
+  // Ignores validated list and object.
+  public boolean equals(Object o)
+  {
+    if (o instanceof TestObjectInputValidation)
+      {
+	TestObjectInputValidation other = (TestObjectInputValidation) o;
+	return this.name.equals(other.name)
+	  && this.priority == other.priority;
+      }
+    return false;
+  }
 }
Index: gnu/testlet/java/io/ObjectInputStream/registerValidation.java
===================================================================
RCS file: /cvs/mauve/mauve/gnu/testlet/java/io/ObjectInputStream/registerValidation.java,v
retrieving revision 1.2
diff -u -r1.2 registerValidation.java
--- gnu/testlet/java/io/ObjectInputStream/registerValidation.java	5 Jul 2005 12:22:39 -0000	1.2
+++ gnu/testlet/java/io/ObjectInputStream/registerValidation.java	12 Oct 2005 17:44:08 -0000
@@ -34,6 +34,7 @@
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
+import java.util.ArrayList;
 
 /**
  * Some checks for registerValidation() method of the {@link ObjectInputStream} class.
@@ -62,11 +63,27 @@
       );
       t2 = (TestObjectInputValidation) in.readObject();
       in.close();
+
+      harness.check(t2, t1); // name and priority the same
+      harness.check(t2.object, t2); // has self-reference
+      harness.check(t2.validated != null);
+
+      Object[] ps = t2.validated.toArray();
+      int[] priorities = new int[ps.length];
+      for (int i = 0; i < ps.length; i++)
+	priorities[i] = ((Integer) ps[i]).intValue();
+      harness.check(priorities != null);
+      harness.check(priorities.length, 5);
+      harness.check(priorities[0], -12);
+      harness.check(priorities[1], -10);
+      harness.check(priorities[2], 10);
+      harness.check(priorities[3], 11);
+      harness.check(priorities[4], 10); // The priority 12 "this" again.
     }
     catch (Exception e) {
       harness.debug(e);
+      harness.check(false, e.toString());
     }
-    harness.check(t2.isValidated());
   }
   
 }

Attachment: signature.asc
Description: This is a digitally signed message part


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]