Package org.exoplatform.commons.serialization

Source Code of org.exoplatform.commons.serialization.TestSerialization

/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.exoplatform.commons.serialization;

import org.exoplatform.commons.serialization.model.TypeDomain;
import org.exoplatform.component.test.AbstractGateInTest;

import java.io.ByteArrayInputStream;
import java.io.NotSerializableException;

/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
public class TestSerialization extends AbstractGateInTest
{

   public void testState() throws Exception
   {
      TypeDomain domain = new TypeDomain();
      domain.addTypeModel(A.class);
      A a = new A();
      a.a = "foo";
      a.b = 2;
      a.c = true;
      SerializationContext context = new SerializationContext(domain);
      a = context.clone(a);
      assertEquals("foo", a.a);
      assertEquals(2, a.b);
      assertEquals(true, a.c);
   }

   public void testMultipleReference1() throws Exception
   {
      TypeDomain domain = new TypeDomain();
      domain.addTypeModel(B.class);
      B b = new B();
      b.ref = new B(b);
      SerializationContext context = new SerializationContext(domain);
      b = context.clone(b);
      assertNotNull(b.ref);
      assertSame(b, b.ref.ref);
   }

   public void testStaticField() throws Exception
   {
      TypeDomain domain = new TypeDomain();
      domain.addTypeModel(D.class);
      D d = new D();
      d.b = "bar";
      SerializationContext context = new SerializationContext(domain);
      byte[] bytes =  context.write(d);
      D.a = "foo";
      d = (D)context.read(bytes);
      assertEquals("foo", D.a);
      assertEquals("bar", d.b);
   }

   public void testMultipleReference2() throws Exception
   {
      TypeDomain domain = new TypeDomain();
      domain.addTypeModel(E2.class);
      E2 e = new E2();
      e.left = new E2();
      ((E2)e.left).left = new E1();
      ((E2)e.left).right = new E1();
      e.right = new E2();
      ((E2)e.right).left = ((E2)e.left).left;
      ((E2)e.right).right = ((E2)e.left).right;
      SerializationContext context = new SerializationContext(domain);
      e = context.clone(e);
      assertSame(((E2)e.left).left, ((E2)e.right).left);
      assertSame(((E2)e.left).right, ((E2)e.right).right);
   }

   public void testListOfReplicatable() throws Exception
   {
      TypeDomain domain = new TypeDomain();
      domain.addTypeModel(F.class);

      //
      F f1 = new F();
      F f2 = new F();
      f1.children.add(f2);
      f2.parent = f1;

      //
      SerializationContext context = new SerializationContext(domain);
      f1 = context.clone(f1);

      //
      assertNotNull(f1.children);
      assertNull(f1.parent);
      assertEquals(1, f1.children.size());
      assertNotNull(f1.children.get(0));
      assertSame(f1, f1.children.get(0).parent);
   }

   public void testNotSerializable() throws Exception
   {
      TypeDomain domain = new TypeDomain();
      domain.addTypeModel(ByteArrayInputStream.class);

      SerializationContext context = new SerializationContext(domain);
      try
      {
         context.write(new ByteArrayInputStream(new byte[0]));
         fail();
      }
      catch (NotSerializableException e)
      {
      }
   }

   public void testTransientField() throws Exception
   {
      TypeDomain domain = new TypeDomain();
      domain.addTypeModel(G.class);
      SerializationContext context = new SerializationContext(domain);
      G g = new G();
      g.a = "foo";
      g.b = new Thread();
      g = context.clone(g);
      assertEquals("foo", g.a);
      assertEquals(null, g.b);
   }
}
TOP

Related Classes of org.exoplatform.commons.serialization.TestSerialization

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.