Package org.hivedb.util

Source Code of org.hivedb.util.TestGenerateInstance$Baa

package org.hivedb.util;

import org.hivedb.annotations.GeneratedClass;
import org.hivedb.annotations.GeneratorIgnore;
import org.hivedb.util.classgen.GenerateInstance;
import org.hivedb.util.classgen.GeneratedClassFactory;
import org.hivedb.util.classgen.GeneratedInstanceInterceptor;
import org.hivedb.util.functional.Atom;
import org.junit.Assert;
import org.junit.Test;

import java.util.Collection;
import java.util.HashSet;

public class TestGenerateInstance {
  @GeneratedClass("FooImpl")
  public interface Foo {
    @GeneratorIgnore
    String getString();
    void setString(String s);
    int getInt();
  }
  @GeneratedClass("BooImpl")
  public interface Boo extends Foo {
    Collection<Coo> getCoos();
  }
  @GeneratedClass("CooImpl")
  public interface Coo {
    long getLong();
  }
 
  @Test
  public void testGenerateInstance() {
    Boo boo = (Boo)new GenerateInstance<Boo>(Boo.class).generate();
    Assert.assertTrue(boo.getInt() != 0);
    Assert.assertTrue(boo.getCoos().size() > 0);
    Assert.assertTrue(boo.getString() == null);
  }

  @Test
  public void shouldAddSetters() throws Exception {
    Foo generated = GeneratedClassFactory.newInstance(Foo.class, new GeneratedInstanceInterceptor(Foo.class));
    String speech = "I have a dream!";
    generated.setString(speech);
    Assert.assertEquals(generated.getString(), speech);
  }

  @GeneratedClass("FaaImpl")
  public interface Faa {
    String getString();
    int getInt();
  }
  @GeneratedClass("BaaImpl")
  public interface Baa extends Faa {
    Collection<Caa> getCaas();
  }
  @GeneratedClass("CaaImpl")
  public interface Caa {
    long getLong();
  }
  @Test
  public void testGenerateAndCopyProperties() {
    Baa baa = (Baa)new GenerateInstance<Baa>(Baa.class).generate();
    Object x = baa;
    // Test getter via method invocation
    try {
      final int int1 = baa.getInt();
      Assert.assertEquals(x.getClass().getMethod("getInt", new Class[] {}).invoke(baa, new Object[] {}), int1);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
    Baa boohaa = new GenerateInstance<Baa>(Baa.class).generateAndCopyProperties(baa);
    Assert.assertEquals(baa, boohaa);
    Assert.assertSame(baa.getString(), boohaa.getString()); // "primitives" are not cloned
    Assert.assertNotSame(baa.getCaas(), boohaa.getCaas()); // collections are
    Assert.assertEquals(new HashSet(baa.getCaas()), new HashSet(boohaa.getCaas())); // should still equal
    Assert.assertNotSame(Atom.getFirstOrThrow(baa.getCaas()), Atom.getFirstOrThrow(boohaa.getCaas())); // complex items clone
    Assert.assertEquals(Atom.getFirstOrThrow(baa.getCaas()), Atom.getFirstOrThrow(boohaa.getCaas())); // should still equal
  }
}
TOP

Related Classes of org.hivedb.util.TestGenerateInstance$Baa

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.