blob: 04fe64abfad332ea846d69b7288478b70458991d [file] [log] [blame]
/*
* 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
<<<<<<< Updated upstream
*
* 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
=======
*
* https://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
>>>>>>> Stashed changes
* limitations under the License.
*/
package org.apache.jdo.tck.models.inheritance;
import javax.jdo.Extent;
import javax.jdo.JDOException;
import javax.jdo.JDOUserException;
import javax.jdo.PersistenceManager;
import javax.jdo.Transaction;
import org.apache.jdo.tck.pc.inheritance.Constants;
import org.apache.jdo.tck.pc.inheritance.FieldSameName4;
import org.apache.jdo.tck.util.BatchTestRunner;
/**
* <B>Title:</B> Field With the Same Name as a Field in a Superclass <br>
* <B>Keywords:</B> inheritance <br>
* <B>Assertion ID:</B> A6.5-7. <br>
* <B>Assertion Description: </B> A class might define a new field with the same name as the field
* declared in the superclass, and might define it to be different (persistent or not) from the
* inherited field. But Java treats the declared field as a different field from the inherited
* field, so there is no conflict.
*/
public class FieldWithSameNameInSuperclass extends TestParts {
/** */
private static final String ASSERTION_FAILED =
"Assertion A6.5-7 (FieldWithSameNameInSuperclass) failed: ";
/**
* The <code>main</code> is called when the class is directly executed from the command line.
*
* @param args The arguments passed to the program.
*/
public static void main(String[] args) {
BatchTestRunner.run(FieldWithSameNameInSuperclass.class);
}
/**
* @see org.apache.jdo.tck.JDO_Test#localSetUp()
*/
@Override
protected void localSetUp() {
addTearDownClass(FieldSameName4.class);
}
/** */
public void test() {
pm = getPM();
runTest(pm);
pm.close();
pm = null;
}
/** */
void runTest(PersistenceManager pm) {
Transaction t = pm.currentTransaction();
try {
t.setRestoreValues(true);
t.begin();
FieldSameName4 refa =
new FieldSameName4(
Constants.intA_V[1],
Constants.doubleB_V[1],
Constants.intB_V[1],
Constants.charC_V[1],
Constants.booleanD_V[1],
Constants.floatE_V[1],
Constants.shortF_V[1],
Constants.shortG_V[1],
Constants.intH_V[1]);
pm.makePersistent(refa);
Object objPtrA = pm.getObjectId(refa);
refa.setSecondObj(
new FieldSameName4(
Constants.intA_V[2],
Constants.doubleB_V[2],
Constants.intB_V[2],
Constants.charC_V[2],
Constants.booleanD_V[2],
Constants.floatE_V[2],
Constants.shortF_V[2],
Constants.shortG_V[2],
Constants.intH_V[2]));
TestParts.secondObj_V[1] = refa.getSecondObj();
refa.setThirdObj(
new FieldSameName4(
Constants.intA_V[3],
Constants.doubleB_V[3],
Constants.intB_V[3],
Constants.charC_V[3],
Constants.booleanD_V[3],
Constants.floatE_V[3],
Constants.shortF_V[3],
Constants.shortG_V[3],
Constants.intH_V[3]));
TestParts.thirdObj_V[1] = refa.getThirdObj();
pm.makePersistent(TestParts.thirdObj_V[1]);
Object objPtrB = pm.getObjectId(TestParts.thirdObj_V[1]);
refa.setFourthObj(
new FieldSameName4(
Constants.intA_V[4],
Constants.doubleB_V[4],
Constants.intB_V[4],
Constants.charC_V[4],
Constants.booleanD_V[4],
Constants.floatE_V[4],
Constants.shortF_V[4],
Constants.shortG_V[4],
Constants.intH_V[4]));
TestParts.fourthObj_V[1] = refa.getFourthObj();
try {
t.commit();
} catch (JDOException e) {
Object o = e.getFailedObject();
String cname = o == null ? "null" : o.getClass().getName();
fail(
ASSERTION_FAILED,
"Exception thrown, failed object class is " + cname + " exception is " + e);
}
t.begin();
FieldSameName4 a = null;
FieldSameName4 b = null;
try { // retrieve object created in previous transaction & store in value array for later
// comparison
TestParts.thirdObj_V[1] = pm.getObjectById(objPtrB, true);
} catch (JDOUserException e) {
// could not locate persistent object created in previous
// transaction
fail(ASSERTION_FAILED, "JDOUserException " + e + " could not reference thirdObj.");
}
try { // retrieve object created in previous transaction
a = (FieldSameName4) pm.getObjectById(objPtrA, true);
checkPersistentAreCorrect(
ASSERTION_FAILED,
PERSISTENT_AFTER_COMMIT,
1,
a.getDoubleB(),
a.getIntB(),
a.getShortF(),
a.getThirdObj(),
a.getIntH());
// verify referenced persistent object contains correct values
b = a.getThirdObj();
if (b != null) { // if previous error caused b to be null, then these tests cannot be
// performed.
checkPersistentAreCorrect(
ASSERTION_FAILED,
PERSISTENT_AFTER_COMMIT,
3,
b.getDoubleB(),
b.getIntB(),
b.getShortF(),
b.getThirdObj(),
b.getIntH());
}
} catch (JDOUserException e) {
// could not locate persistent object created in previous transaction
fail(
ASSERTION_FAILED,
"JDOUserException " + e + " could not reference previously created object.");
}
// set in new values
a.setIntA(Constants.intA_V[5]);
a.setCharC(Constants.charC_V[5]);
a.setBooleanD(Constants.booleanD_V[5]);
a.setShortG(Constants.shortG_V[5]);
FieldSameName4 fourth =
new FieldSameName4(
Constants.intA_V[6],
Constants.doubleB_V[6],
Constants.intB_V[6],
Constants.charC_V[6],
Constants.booleanD_V[6],
Constants.floatE_V[6],
Constants.shortF_V[6],
Constants.shortG_V[6],
Constants.intH_V[6]);
a.setFourthObj(fourth);
a.setFloatE(Constants.floatE_V[5]);
a.setSecondObj(null);
a.setDoubleB(Constants.doubleB_V[5]);
a.setIntB(Constants.intB_V[5]);
a.setShortF(Constants.shortF_V[5]);
a.setThirdObj(null);
a.setIntH(Constants.intH_V[5]);
b.setIntA(Constants.intA_V[7]);
b.setCharC(Constants.charC_V[7]);
b.setBooleanD(Constants.booleanD_V[7]);
b.setShortG(Constants.shortG_V[7]);
b.setFourthObj(null);
b.setFloatE(Constants.floatE_V[7]);
b.setSecondObj(null);
b.setDoubleB(Constants.doubleB_V[7]);
b.setIntB(Constants.intB_V[7]);
b.setShortF(Constants.shortF_V[7]);
b.setThirdObj(null);
b.setIntH(Constants.intH_V[7]);
// create new objects and make persistent
FieldSameName4 c =
new FieldSameName4(
Constants.intA_V[8],
Constants.doubleB_V[8],
Constants.intB_V[8],
Constants.charC_V[8],
Constants.booleanD_V[8],
Constants.floatE_V[8],
Constants.shortF_V[8],
Constants.shortG_V[8],
Constants.intH_V[8]);
FieldSameName4 d =
new FieldSameName4(
Constants.intA_V[9],
Constants.doubleB_V[9],
Constants.intB_V[9],
Constants.charC_V[9],
Constants.booleanD_V[9],
Constants.floatE_V[9],
Constants.shortF_V[9],
Constants.shortG_V[9],
Constants.intH_V[9]);
c.setThirdObj(d);
c.setFourthObj(d);
TestParts.thirdObj_V[8] = d;
TestParts.fourthObj_V[8] = d;
pm.makePersistent(c);
// change values of newly persistent object
c.setIntA(Constants.intA_V[10]);
c.setCharC(Constants.charC_V[10]);
c.setBooleanD(Constants.booleanD_V[10]);
c.setShortG(Constants.shortG_V[10]);
c.setFourthObj(null);
c.setFloatE(Constants.floatE_V[10]);
c.setSecondObj(null);
c.setDoubleB(Constants.doubleB_V[10]);
c.setIntB(Constants.intB_V[10]);
c.setShortF(Constants.shortF_V[10]);
c.setThirdObj(null);
c.setIntH(Constants.intH_V[10]);
t.rollback();
// verify objects revert back to transient after rollback
checkPersistentAreCorrect(
ASSERTION_FAILED,
TRANSIENT_AFTER_ROLLBACK,
8,
c.getDoubleB(),
c.getIntB(),
c.getShortF(),
c.getThirdObj(),
c.getIntH());
checkTransactionalAreCorrect(
ASSERTION_FAILED, TRANSIENT_AFTER_ROLLBACK, 8, c.getFloatE(), c.getSecondObj());
checkNonpersistentAreCorrect(
ASSERTION_FAILED,
TRANSIENT_AFTER_ROLLBACK,
10,
c.getIntA(),
c.getCharC(),
c.getBooleanD(),
c.getShortG(),
c.getFourthObj());
t.begin();
// verify rollback lost all persistent changes.
try { // retrieve object created in previous transaction & store in value array for later
// comparison
TestParts.thirdObj_V[1] = pm.getObjectById(objPtrB, true);
} catch (JDOUserException e) {
// could not locate persistent object created in previous transaction
fail(ASSERTION_FAILED, "JDOUserException " + e + " could not reference thirdObj.");
}
try { // retrieve object created in previous transaction
a = (FieldSameName4) pm.getObjectById(objPtrA, true);
checkPersistentAreCorrect(
ASSERTION_FAILED,
PERSISTENT_AFTER_ROLLBACK,
1,
a.getDoubleB(),
a.getIntB(),
a.getShortF(),
a.getThirdObj(),
a.getIntH());
b = a.getThirdObj();
if (b != null) { // if previous error caused b to be null, then these tests cannot be
// performed.
checkPersistentAreCorrect(
ASSERTION_FAILED,
PERSISTENT_AFTER_ROLLBACK,
3,
b.getDoubleB(),
b.getIntB(),
b.getShortF(),
b.getThirdObj(),
b.getIntH());
}
} catch (JDOUserException e) {
// could not locate persistent object created in previous transaction
fail(
ASSERTION_FAILED,
"JDOUserException " + e + " could not reference previously created object.");
}
t.rollback();
t = null;
} finally {
if ((t != null) && t.isActive()) t.rollback();
}
}
void removeAllInstances(PersistenceManager pm) {
Extent<FieldSameName4> e = pm.getExtent(FieldSameName4.class, true);
for (FieldSameName4 fieldSameName4 : e) {
pm.deletePersistent(fieldSameName4);
}
}
}