/*
* JacORB - a free Java ORB
*
* Copyright (C) 1997-2006 The JacORB project.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.jacorb.test.bugs.bugjac445;
import static org.junit.Assert.assertTrue;
import java.util.Properties;
import org.jacorb.orb.CDRInputStream;
import org.jacorb.orb.CDROutputStream;
import org.jacorb.test.harness.ORBTestCase;
import org.junit.Before;
import org.junit.Test;
/**
* @author Alphonse Bendt
*/
public class BugJac445Test extends ORBTestCase
{
private A a;
private B b;
private First first;
private Second second;
private Both both;
@Before
public void setUp() throws Exception
{
a = new A();
a.value = 10;
b = new B();
b.a_struct = a;
b.value = 20;
first = new First();
first.b_struct = b;
second = new Second();
second.a_struct = a;
second.b_struct = b;
both = new Both();
both.first_any = orb.create_any();
both.second_any = orb.create_any();
FirstHelper.insert(both.first_any, first);
SecondHelper.insert(both.second_any, second);
}
@Override
protected void patchORBProperties(Properties props)
{
props.setProperty("jacorb.interop.indirection_encoding_disable", "off");
props.setProperty("jacorb.cacheTypecodes", "on");
}
@Test
public void testCacheOverMemberBoundaries() throws Exception
{
CDROutputStream out = (CDROutputStream) orb.create_output_stream();
BothHelper.write(out, both);
CDRInputStream in = new CDRInputStream(orb, out.getBufferCopy());
Both copy = BothHelper.read(in);
FirstHelper.extract(copy.first_any);
SecondHelper.extract(copy.second_any);
assertTrue(FirstHelper.type().equivalent(copy.first_any.type()));
assertTrue(SecondHelper.type().equivalent(copy.second_any.type()));
}
@Test
public void testCacheRecursiveOverMemberBoundaries() throws Exception
{
CDROutputStream out = (CDROutputStream) orb.create_output_stream();
RecursiveA recA = new RecursiveA();
recA.value = 1234;
recA.member = new RecursiveA[0];
RecursiveB recB = new RecursiveB();
recB.a_struct = recA;
recB.value = 2000;
RecursiveC recC = new RecursiveC();
recC.a_struct = recA;
recC.b_struct = recB;
RecursiveBHelper.insert(both.first_any, recB);
RecursiveCHelper.insert(both.second_any, recC);
BothHelper.write(out, both);
CDRInputStream in = new CDRInputStream(orb, out.getBufferCopy());
Both copy = BothHelper.read(in);
assertTrue(RecursiveBHelper.type().equivalent(copy.first_any.type()));
assertTrue(RecursiveCHelper.type().equivalent(copy.second_any.type()));
}
}