Package org.nutz.dao.test.normal

Source Code of org.nutz.dao.test.normal.SupportedFieldTypeTest$EntityTypes

package org.nutz.dao.test.normal;

import static org.junit.Assert.*;

import java.lang.reflect.Field;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;

import org.junit.Test;

import org.nutz.castor.Castors;
import org.nutz.castor.FailToCastObjectException;
import org.nutz.dao.Chain;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.test.DaoCase;
import org.nutz.lang.Lang;
import org.nutz.lang.Mirror;
import org.nutz.lang.meta.Email;

public class SupportedFieldTypeTest extends DaoCase {

  @Override
  protected void before() {
    dao.create(EntityTypes.class, true);
  }

  public static enum TT {
    A, B
  }

  @Table("dao_supported_type")
  public static class EntityTypes {
    @Column
    @Id
    public int id;

    @Column
    @Name
    public String name;

    @Column
    @Default("zozoh@gmail.com")
    public Email email;

    @Column
    public TT enum_s;

    // It will auto detect db, and use INT
    @Column
    public TT enum_i;

    @Column
    public boolean bool_p;

    @Column
    public Boolean bool_obj;

    @Column
    public char char_p;

    @Column
    public Character char_obj;

    @Column
    public Date sqlDate;

    @Column
    public Time sqlTime;

    @Column
    public Timestamp sqlDT;

    @Column
    public int int_p;

    @Column
    public Integer int_obj;

    @Column
    public float float_p;

    @Column
    public Float float_obj;

    @Column
    public short short_p;

    @Column
    public Short short_obj;

    @Column
    public byte byte_p;

    @Column
    public Byte byte_obj;

    @Column
    public long long_p;

    @Column
    public Long long_obj;

    @Column
    public double double_p;

    @Column
    public Double double_obj;

  }

  @Test
  public void insert_char_field() {
    dao.insert(EntityTypes.class, Chain  .make("char_p", 't')
                      .add("char_obj", Character.valueOf('O'))
                      .add("name", "ABC"));
    EntityTypes et = dao.fetch(EntityTypes.class);
    assertEquals('t', et.char_p);
    assertEquals('O', et.char_obj.charValue());
  }

  @Test
  public void insert_timestamp_field() {
    Timestamp tm = new Timestamp(System.currentTimeMillis());
    dao.insert(EntityTypes.class, Chain.make("name", "ABC").add("sqlDT", tm));
    EntityTypes et = dao.fetch(EntityTypes.class);
    if (dao.meta().isPostgresql())
      assertEquals(tm.getTime(), et.sqlDT.getTime());
    else
      assertEquals(tm.getTime() / 1000, et.sqlDT.getTime() / 1000);
  }

  @Test
  public void check_for_sqlTime() {
    Time time = Castors.me().castTo("07:09:12", Time.class);
    dao.insert(EntityTypes.class, Chain.make("name", "ABC").add("sqlTime", time));
    EntityTypes et = dao.fetch(EntityTypes.class);
    assertEquals(time.toString(), et.sqlTime.toString());
  }

  @Test
  public void check_update_sqlTimestamp() {
    EntityTypes exp = new EntityTypes();
    exp.name = "T";
    Timestamp tm = new Timestamp(System.currentTimeMillis());
    exp.sqlDT = tm;
    dao.insert(exp);
    exp = dao.fetch(EntityTypes.class, "T");
    // MySql TIMESTAMP precision only to second
    assertEquals(tm.getTime() / 1000, exp.sqlDT.getTime() / 1000);
  }

  @Test
  public void check_if_support_all_normal_types() throws FailToCastObjectException {
    String d = "2009-02-01";
    String t = "12:23:23";
    String dt = d + " " + t;
    Date date = Castors.me().castTo(d, Date.class);
    Time time = Castors.me().castTo(t, Time.class);
    Timestamp ts = Castors.me().castTo(dt, Timestamp.class);
    EntityTypes exp = new EntityTypes();
    exp.name = "XX";
    exp.enum_s = TT.B;
    exp.enum_i = TT.A;
    exp.char_p = 'G';
    exp.char_obj = 'O';
    exp.int_p = 23;
    exp.int_obj = 23;
    exp.float_p = 34.67f;
    exp.float_obj = 34.68f;
    exp.short_p = 6;
    exp.short_obj = 6;
    exp.byte_p = 2;
    exp.byte_obj = 4;
    exp.long_p = 56787;
    exp.long_obj = 5678L;
    exp.double_p = 2.4325243;
    exp.double_obj = 3.4325243;
    exp.sqlDate = date;
    exp.sqlTime = time;
    exp.sqlDT = ts;
    dao.insert(exp);
    EntityTypes et = dao.fetch(EntityTypes.class);
    assertEquals(exp.id, et.id);
    Mirror<EntityTypes> me = Mirror.me(EntityTypes.class);
    for (Field f : me.getFields()) {
      Object expValue;
      Object ttValue;
      // Mysql 5.0.18, 会去掉毫秒数
      if (f.getName().equals("sqlTime") && 
          (dao.meta().isMySql() || dao.meta().isHsql())) {
        expValue = me.getValue(exp, f).toString();
        ttValue = me.getValue(et, f).toString();
      }
      // 其他的数据库无所谓
      else {
        expValue = me.getValue(exp, f);
        ttValue = me.getValue(et, f);
        if (null == expValue)
          continue;
      }
      if (!expValue.equals(ttValue) && !dao.meta().isDB2()) //DB2的精度有点问题
        throw Lang.makeThrow"'%s' expect [%s] but it was [%s]",
                    f.getName(),
                    expValue,
                    ttValue);
    }
    assertTrue(true);
  }

  @Test
  public void check_insert_null_timestamp_field() {
    EntityTypes exp = new EntityTypes();
    exp.name = "JJ";
    dao.insert(exp);
    assertTrue(true);
  }

}
TOP

Related Classes of org.nutz.dao.test.normal.SupportedFieldTypeTest$EntityTypes

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.