public inbox for mauve-discuss@sourceware.org
 help / color / mirror / Atom feed
* registerValidation update
@ 2005-10-12 17:44 Mark Wielaard
  2005-10-12 18:02 ` David Gilbert
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Wielaard @ 2005-10-12 17:44 UTC (permalink / raw)
  To: mauve-discuss; +Cc: David Gilbert


[-- Attachment #1.1: Type: text/plain, Size: 861 bytes --]

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

[-- Attachment #1.2: registerValidation.patch --]
[-- Type: text/x-patch, Size: 4274 bytes --]

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 #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: registerValidation update
  2005-10-12 17:44 registerValidation update Mark Wielaard
@ 2005-10-12 18:02 ` David Gilbert
  2005-10-12 19:38   ` Mark Wielaard
  0 siblings, 1 reply; 3+ messages in thread
From: David Gilbert @ 2005-10-12 18:02 UTC (permalink / raw)
  To: Mark Wielaard; +Cc: mauve-discuss

Mark Wielaard wrote:

>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.
>
>  
>
Hi Mark,

There is one case of this in JFreeChart, in the AbstractDataset class.  
I didn't write the code, and I'd have to go and study it to figure out 
what it does...most likely I wrote the Mauve test while trying to 
understand the mechanism in general.  I'm out of time for today, but can 
probably look at this in the morning...

Regards,

Dave

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: registerValidation update
  2005-10-12 18:02 ` David Gilbert
@ 2005-10-12 19:38   ` Mark Wielaard
  0 siblings, 0 replies; 3+ messages in thread
From: Mark Wielaard @ 2005-10-12 19:38 UTC (permalink / raw)
  To: David Gilbert; +Cc: mauve-discuss

[-- Attachment #1: Type: text/plain, Size: 920 bytes --]

Hi David,

On Wed, 2005-10-12 at 19:02 +0000, David Gilbert wrote:
> There is one case of this in JFreeChart, in the AbstractDataset class.  
> I didn't write the code, and I'd have to go and study it to figure out 
> what it does...most likely I wrote the Mauve test while trying to 
> understand the mechanism in general.  I'm out of time for today, but can 
> probably look at this in the morning...

Thanks. I looked at the code and that should work now. It is an
interesting use of validation. (After the object is completely
deserialized and the listeners are attached it fires an update event to
them.) But I wasn't really able to run the unit tests of JFreeChart
easily (some free swing breakage makes it impossible to select a
test...). If you are able to run the unittests against a recent GNU
Classpath from CVS that would be appreciated. I checked in my latest
fixes now.

Thanks,

Mark

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-10-12 19:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-10-12 17:44 registerValidation update Mark Wielaard
2005-10-12 18:02 ` David Gilbert
2005-10-12 19:38   ` Mark Wielaard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).