BigInteger testBigInteger, BigDecimal testBigDecimal)
throws Exception {
OpenJPAEntityManager pm = getPM(true, false);
startTx(pm);
AllFieldTypesTest test = new AllFieldTypesTest();
pm.persist(test);
Object testID = pm.getObjectId(test);
test.setTestint(testint);
test.setTestlong(testlong);
test.setTestdouble(testdouble);
test.setTestshort(testshort);
test.setTestfloat(testfloat);
test.setTestbyte(testbyte);
test.setTestboolean(testboolean);
test.setTestchar(testchar);
test.setTestString(testString);
test.setTestDate(testDate);
test.setTestObject(testObject);
test.setTestBigInteger(testBigInteger);
test.setTestBigDecimal(testBigDecimal);
try {
endTx(pm);
} catch (Exception e) {
if (e instanceof Exception &&
((Exception) e).getMessage().indexOf
("Maximum length is 8000") != -1) {
bug(AbstractTestCase.Platform.SQLSERVER, 5, e,
"SQLServer cannot deal"
+ " with numbers with more than 8000 digits");
} else {
throw e;
}
}
endEm(pm);
//assertPersistent (test, true, false, false, false);
pm = getPM(true, false);
startTx(pm);
AllFieldTypesTest retrievedObject =
(AllFieldTypesTest) pm.find(AllFieldTypesTest.class, testID);
assertEquals("Field type int", testint,
retrievedObject.getTestint());
assertEquals("Field type short", testshort,
retrievedObject.getTestshort());
assertEquals("Field type boolean", testboolean,
retrievedObject.getTestboolean());
assertEquals("Field type char", testchar,
retrievedObject.getTestchar());
assertEquals("Field type long", testlong,
retrievedObject.getTestlong());
assertEquals("Field type byte", testbyte,
retrievedObject.getTestbyte());
assertEquals("Field type String", testString,
retrievedObject.getTestString());
int i1 = (int) (testDate.getTime() / 1000);
int i2 = (int) (retrievedObject.getTestDate().getTime() / 1000);
int testDateDay = testDate.getDay();
int testDateMonth = testDate.getMonth();
int testDateYear = testDate.getYear();
int retrievedObjectDay = retrievedObject.getTestDate().getDay();
int retrievedObjectMonth = retrievedObject.getTestDate().getMonth();
int retrievedObjectYear = retrievedObject.getTestDate().getYear();
System.out.println("i1 : " + i1 + "\ni2 : " + i2);
//CR346162. In this CR, it was stated that @Temporal(DATE) fields will be equal for year, month, day but not for hours,
//minutes, seconds. So, we removed the time check and checked only for the equality of day, month and year
/* assertEquals("Field type Date: "
+ testDate.getTime() + "!="
+ retrievedObject.getTestDate().getTime()
+ "[" + new Date(testDate.getTime()) + " != "
+ new Date(retrievedObject.getTestDate().getTime()) + "]",
(int) (testDate.getTime() / 1000),
(int) (retrievedObject.getTestDate().getTime() / 1000));*/
if ((testDateDay != retrievedObjectDay) ||
(testDateMonth != retrievedObjectMonth) ||
(testDateYear != retrievedObjectYear)) {
Assert.fail(
"Field type Date not stored properly. One or more of the components of the date (day, month or year) do not match. \n" +
" Value that should be stored : " + testDate.toGMTString() +
". \nValue that is actually" +
"stored : " + retrievedObject.getTestDate().toGMTString());
}
//assertEquals ("Field type Object", testObject,
//retrievedObject.getTestObject ());
assertEquals("Field type BigInteger", testBigInteger,
retrievedObject.getTestBigInteger());
try {
assertEquals("Field type BigDecimal (BigInteger part)",
testBigDecimal.toBigInteger(),
retrievedObject.getTestBigDecimal().toBigInteger());
assertEquals("Field type BigDecimal",
testBigDecimal,
retrievedObject.getTestBigDecimal());
assertEquals("Field type float", testfloat,
retrievedObject.getTestfloat(), 0.01f);
assertEquals("Field type double", testdouble,
retrievedObject.getTestdouble(), 0.01d);
} catch (AssertionFailedError afe) {
bug(3, afe,
"Doubles and Floats lose precision in some data stores");
}