/* | |
* TestSpecialNumbers.java | |
* | |
* Created on October 13, 2006, 4:56 PM | |
* | |
* To change this template, choose Tools | Template Manager | |
* and open the template in the editor. | |
*/ | |
/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the | |
* "License"); you may not use this file except in compliance | |
* with the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, | |
* software distributed under the License is distributed on an | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
* KIND, either express or implied. See the License for the | |
* specific language governing permissions and limitations | |
* under the License. | |
*/ | |
package org.apache.openjpa.persistence.kernel; | |
import java.math.BigInteger; | |
import java.util.Collection; | |
import java.util.EnumSet; | |
import org.apache.openjpa.persistence.kernel.common.apps.AllFieldTypesTest; | |
import org.apache.openjpa.persistence.common.utils.AbstractTestCase; | |
import junit.framework.AssertionFailedError; | |
import org.apache.openjpa.persistence.OpenJPAEntityManager; | |
import org.apache.openjpa.persistence.OpenJPAQuery; | |
public class TestSpecialNumbers extends BaseKernelTest { | |
/** | |
* Creates a new instance of TestSpecialNumbers | |
*/ | |
public TestSpecialNumbers() { | |
} | |
public TestSpecialNumbers(String name) { | |
super(name); | |
} | |
public void setUp() { | |
try { | |
deleteAll(AllFieldTypesTest.class); | |
} catch (Exception e) { | |
// catch errors when deleting ... PostgreSQL has | |
// a couple problems with some of the values that | |
// try to get inserted. | |
} | |
} | |
public void testShortMax() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestshort(Short.MAX_VALUE); | |
saveAndQuery(aftt, "testshort = :param", new Short(Short.MAX_VALUE)); | |
} | |
public void testShortMin() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestshort(Short.MIN_VALUE); | |
try { | |
saveAndQuery(aftt, "testshort = :param", | |
new Short(Short.MIN_VALUE)); | |
} catch (Throwable t) { | |
bug(AbstractTestCase.Platform.EMPRESS, 889, t, | |
"Empress cannot store min values"); | |
} | |
} | |
public void testLongMax() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestlong(Long.MAX_VALUE); | |
saveAndQuery(aftt, "testlong = :param", new Long(Long.MAX_VALUE)); | |
} | |
public void testLongMin() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestlong(Long.MIN_VALUE); | |
saveAndQuery(aftt, "testlong = :param", new Long(Long.MIN_VALUE)); | |
} catch (Throwable t) { | |
bug(AbstractTestCase.Platform.HYPERSONIC, 474, t, | |
"Some databases cannot store Long.MIN_VALUE"); | |
} | |
} | |
public void testIntegerMax() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestint(Integer.MAX_VALUE); | |
saveAndQuery(aftt, "testint = :param", | |
new Integer(Integer.MAX_VALUE)); | |
} | |
public void testIntegerMin() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestint(Integer.MIN_VALUE); | |
try { | |
saveAndQuery(aftt, "testint = :param", | |
new Integer(Integer.MIN_VALUE)); | |
} catch (Throwable t) { | |
bug(AbstractTestCase.Platform.EMPRESS, 889, t, | |
"Empress cannot store min values"); | |
} | |
} | |
public void testFloatMax() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestfloat(Float.MAX_VALUE); | |
saveAndQuery(aftt, "testfloat = :param", | |
new Float(Float.MAX_VALUE)); | |
} catch (Exception e) { | |
bug(EnumSet.of(AbstractTestCase.Platform.POSTGRESQL, | |
AbstractTestCase.Platform.DB2, | |
AbstractTestCase.Platform.MYSQL, | |
AbstractTestCase.Platform.DERBY), 494, e, | |
"Some datastores cannot store Float.MAX_VALUE"); | |
} | |
} | |
public void testFloatMin() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestfloat(Float.MIN_VALUE); | |
saveAndQuery(aftt, "testfloat = :param", | |
new Float(Float.MIN_VALUE)); | |
} catch (Exception e) { | |
bug(EnumSet.of(AbstractTestCase.Platform.POSTGRESQL, | |
AbstractTestCase.Platform.SQLSERVER, | |
AbstractTestCase.Platform.DB2, | |
AbstractTestCase.Platform.INFORMIX, | |
AbstractTestCase.Platform.DERBY), 494, e, | |
"Some databases cannot store Float.MIN_VALUE"); | |
} catch (AssertionFailedError e) { | |
bug(EnumSet.of(AbstractTestCase.Platform.MYSQL, | |
AbstractTestCase.Platform.SQLSERVER), 494, e, | |
"Some databases cannot store Float.MIN_VALUE"); | |
} | |
} | |
public void testFloatNaN() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestfloat(Float.NaN); | |
saveAndQuery(aftt, "testfloat = :param", new Float(Float.NaN)); | |
} catch (Throwable t) { | |
bug(461, t, "NaN problems"); | |
} | |
} | |
public void testFloatNegativeInfinity() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestfloat(Float.NEGATIVE_INFINITY); | |
saveAndQuery(aftt, "testfloat = :param", | |
new Float(Float.NEGATIVE_INFINITY)); | |
} catch (Exception e) { | |
bug(EnumSet.of(AbstractTestCase.Platform.POINTBASE, | |
AbstractTestCase.Platform.POSTGRESQL, | |
AbstractTestCase.Platform.MYSQL, | |
AbstractTestCase.Platform.DB2, | |
AbstractTestCase.Platform.ORACLE, | |
AbstractTestCase.Platform.INFORMIX, | |
AbstractTestCase.Platform.DERBY, | |
AbstractTestCase.Platform.SQLSERVER), 494, e, | |
"Some databases cannot store Float.NEGATIVE_INFINITY"); | |
} | |
} | |
public void testFloatPostivieInfinity() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestfloat(Float.POSITIVE_INFINITY); | |
saveAndQuery(aftt, "testfloat = :param", | |
new Float(Float.POSITIVE_INFINITY)); | |
} catch (Exception e) { | |
bug(EnumSet.of(AbstractTestCase.Platform.POINTBASE, | |
AbstractTestCase.Platform.POSTGRESQL, | |
AbstractTestCase.Platform.MYSQL, | |
AbstractTestCase.Platform.DB2, | |
AbstractTestCase.Platform.ORACLE, | |
AbstractTestCase.Platform.INFORMIX, | |
AbstractTestCase.Platform.DERBY, | |
AbstractTestCase.Platform.SQLSERVER), 494, e, | |
"Some databases cannot store Float.POSITIVE_INFINITY"); | |
} | |
} | |
public void testDoubleMax() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestdouble(Double.MAX_VALUE); | |
saveAndQuery(aftt, "testdouble = :param", | |
new Double(Double.MAX_VALUE)); | |
} catch (Exception e) { | |
bug(EnumSet.of(AbstractTestCase.Platform.POINTBASE, | |
AbstractTestCase.Platform.MYSQL, | |
AbstractTestCase.Platform.ORACLE, | |
AbstractTestCase.Platform.POSTGRESQL, | |
AbstractTestCase.Platform.EMPRESS, | |
AbstractTestCase.Platform.DB2, | |
AbstractTestCase.Platform.INFORMIX, | |
AbstractTestCase.Platform.DERBY), 494, e, | |
"Some databases cannot store Double.MAX_VALUE"); | |
} | |
} | |
public void testDoubleMin() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestdouble(Double.MIN_VALUE); | |
saveAndQuery(aftt, "testdouble = :param", | |
new Double(Double.MIN_VALUE)); | |
} catch (Exception e) { | |
bug(EnumSet.of(AbstractTestCase.Platform.POSTGRESQL, | |
AbstractTestCase.Platform.SQLSERVER, | |
AbstractTestCase.Platform.ORACLE, | |
AbstractTestCase.Platform.EMPRESS, | |
AbstractTestCase.Platform.DB2, | |
AbstractTestCase.Platform.INFORMIX, | |
AbstractTestCase.Platform.DERBY), 494, e, | |
"Some databases cannot store Double.MIN_VALUE"); | |
} catch (AssertionFailedError e) { | |
bug(AbstractTestCase.Platform.MYSQL, 494, e, | |
"Some databases cannot store Double.MIN_VALUE"); | |
} | |
} | |
public void testDoubleNaN() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestdouble(Double.NaN); | |
saveAndQuery(aftt, "testdouble = :param", new Double(Double.NaN)); | |
} catch (Throwable t) { | |
bug(461, t, "NaN problems"); | |
} | |
} | |
public void testDoubleNegativeInfinity() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestdouble(Double.NEGATIVE_INFINITY); | |
saveAndQuery(aftt, "testdouble = :param", | |
new Double(Double.NEGATIVE_INFINITY)); | |
} catch (Throwable t) { | |
bug(461, t, "infinity problems"); | |
} | |
} | |
public void testDoublePostivieInfinity() { | |
try { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestdouble(Double.POSITIVE_INFINITY); | |
saveAndQuery(aftt, "testdouble = :param", | |
new Double(Double.POSITIVE_INFINITY)); | |
} catch (Throwable t) { | |
bug(461, t, "infinity problems"); | |
} | |
} | |
public void testByteMin() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestbyte(Byte.MIN_VALUE); | |
try { | |
saveAndQuery(aftt, "testbyte = :param", new Byte(Byte.MIN_VALUE)); | |
} catch (Throwable t) { | |
bug(AbstractTestCase.Platform.EMPRESS, 889, t, | |
"Empress cannot store min values"); | |
} | |
} | |
public void testByteMax() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestbyte(Byte.MAX_VALUE); | |
saveAndQuery(aftt, "testbyte = :param", new Byte(Byte.MAX_VALUE)); | |
} | |
public void testZeroBigInteger() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestBigInteger(BigInteger.ZERO); | |
saveAndQuery(aftt, "testBigInteger = :param", BigInteger.ZERO); | |
} | |
public void testOneBigInteger() { | |
AllFieldTypesTest aftt = new AllFieldTypesTest(); | |
aftt.setTestBigInteger(BigInteger.ONE); | |
saveAndQuery(aftt, "testBigInteger = :param", BigInteger.ONE); | |
} | |
private void saveAndQuery(Object obj, String query, Object param) { | |
OpenJPAEntityManager pm = getPM(); | |
startTx(pm); | |
pm.persist(obj); | |
endTx(pm); | |
endEm(pm); | |
pm = getPM(); | |
OpenJPAQuery q = pm.createQuery("select o from " | |
+ obj.getClass().getName() + " o where " + query); | |
q.setParameter("param", param); | |
Collection c = (Collection) q.getResultList(); | |
assertSize(1, c); | |
endEm(pm); | |
} | |
} |