001: /*
002: * TestInitialValueFetching.java
003: *
004: * Created on October 12, 2006, 11:58 AM
005: *
006: * To change this template, choose Tools | Template Manager
007: * and open the template in the editor.
008: */
009: /*
010: * Licensed to the Apache Software Foundation (ASF) under one
011: * or more contributor license agreements. See the NOTICE file
012: * distributed with this work for additional information
013: * regarding copyright ownership. The ASF licenses this file
014: * to you under the Apache License, Version 2.0 (the
015: * "License"); you may not use this file except in compliance
016: * with the License. You may obtain a copy of the License at
017: *
018: * http://www.apache.org/licenses/LICENSE-2.0
019: *
020: * Unless required by applicable law or agreed to in writing,
021: * software distributed under the License is distributed on an
022: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
023: * KIND, either express or implied. See the License for the
024: * specific language governing permissions and limitations
025: * under the License.
026: */
027: package org.apache.openjpa.persistence.kernel;
028:
029: import java.util.Date;
030: import java.util.HashMap;
031: import java.util.List;
032: import java.util.Map;
033:
034: import org.apache.openjpa.persistence.kernel.common.apps.RuntimeTest1;
035:
036: import org.apache.openjpa.kernel.OpenJPAStateManager;
037: import org.apache.openjpa.meta.FieldMetaData;
038: import org.apache.openjpa.persistence.OpenJPAEntityManager;
039: import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
040: import org.apache.openjpa.persistence.OpenJPAQuery;
041: import org.apache.openjpa.persistence.RestoreStateType;
042:
043: public class TestInitialValueFetching extends BaseKernelTest {
044:
045: /**
046: * Creates a new instance of TestInitialValueFetching
047: */
048: public TestInitialValueFetching(String name) {
049: super (name);
050: }
051:
052: public void setUp() {
053: deleteAll(RuntimeTest1.class);
054: OpenJPAEntityManager pm = getPM();
055: startTx(pm);
056: RuntimeTest1 rt1 = new RuntimeTest1("TestInitialValueFetching",
057: 10);
058: pm.persist(rt1);
059:
060: rt1.setDateField(new Date());
061: endTx(pm);
062: endEm(pm);
063: }
064:
065: public void testInitialValueString() {
066: OpenJPAEntityManager pm = getPM();
067: startTx(pm);
068: RuntimeTest1 rt1 = getObject(pm);
069: OpenJPAStateManager sm = getStateManager(rt1, pm);
070: FieldMetaData fmd = sm.getMetaData().getField("stringField");
071: assertEquals("TestInitialValueFetching", sm
072: .fetchInitialField(fmd.getIndex()));
073: rt1.setStringField("TestInitialValueFetching-2");
074: assertEquals("TestInitialValueFetching", sm
075: .fetchInitialField(fmd.getIndex()));
076: endTx(pm);
077: assertEquals("TestInitialValueFetching-2", sm
078: .fetchInitialField(fmd.getIndex()));
079: endEm(pm);
080: }
081:
082: public void testInitialValueInt() {
083: OpenJPAEntityManager pm = getPM();
084: startTx(pm);
085: RuntimeTest1 rt1 = getObject(pm);
086: OpenJPAStateManager sm = getStateManager(rt1, pm);
087: FieldMetaData fmd = sm.getMetaData().getField("intField1");
088: assertEquals(10, ((Integer) sm
089: .fetchInitialField(fmd.getIndex())).intValue());
090: rt1.setIntField1(11);
091: assertEquals(10, ((Integer) sm
092: .fetchInitialField(fmd.getIndex())).intValue());
093: endTx(pm);
094: assertEquals(11, ((Integer) sm
095: .fetchInitialField(fmd.getIndex())).intValue());
096: endEm(pm);
097: }
098:
099: public void testInitialValueMutableValueFailures() {
100: Map props = new HashMap();
101: props.put("openjpa.RestoreMutableValues", "false");
102: OpenJPAEntityManagerFactory pmf = (OpenJPAEntityManagerFactory) getEmf(props);
103:
104: OpenJPAEntityManager pm = (OpenJPAEntityManager) pmf
105: .createEntityManager();
106: RuntimeTest1 rt1 = getObject(pm);
107:
108: Date d = rt1.getDateField();
109: OpenJPAStateManager sm = getStateManager(rt1, pm);
110: FieldMetaData fmd = sm.getMetaData().getField("dateField");
111: try {
112: sm.fetchInitialField(fmd.getIndex());
113: fail("should get an exception if RestoreMutableValues is false");
114: } catch (org.apache.openjpa.util.UserException e) {
115: // expected
116: }
117: endEm(pm);
118: pmf.close();
119: }
120:
121: public void testInitialValueDate() {
122: Map props = new HashMap();
123: props.put("openjpa.RestoreState", "all");
124: OpenJPAEntityManagerFactory pmf = (OpenJPAEntityManagerFactory) getEmf(props);
125: OpenJPAEntityManager pm = (OpenJPAEntityManager) pmf
126: .createEntityManager();
127: startTx(pm);
128: RuntimeTest1 rt1 = getObject(pm);
129:
130: Date d = rt1.getDateField();
131:
132: OpenJPAStateManager sm = getStateManager(rt1, pm);
133: FieldMetaData fmd = sm.getMetaData().getField("dateField");
134: assertEquals(d, sm.fetchInitialField(fmd.getIndex()));
135:
136: // == should pass here since we haven't made any modifications.
137: assertTrue("mutable object fails == test; should not", d == sm
138: .fetchInitialField(fmd.getIndex()));
139:
140: Date d2 = new Date();
141: rt1.setDateField(d2);
142: assertEquals(d, sm.fetchInitialField(fmd.getIndex()));
143: endTx(pm);
144: assertEquals(d2, sm.fetchInitialField(fmd.getIndex()));
145: assertTrue("mutable object passes == test; should not",
146: d2 != sm.fetchInitialField(fmd.getIndex()));
147: endEm(pm);
148: }
149:
150: public void testInitialValueExceptions() {
151: OpenJPAEntityManager pm = getPM();
152: pm.setRestoreState(RestoreStateType.NONE);
153: startTx(pm);
154: RuntimeTest1 rt1 = getObject(pm);
155: OpenJPAStateManager sm = getStateManager(rt1, pm);
156: FieldMetaData fmd = sm.getMetaData().getField("stringField");
157: try {
158: sm.fetchInitialField(fmd.getIndex());
159: fail("exception should be thrown by KodoSM.fetchInitialField");
160: } catch (org.apache.openjpa.util.UserException e) {
161: // expected case
162: }
163: endTx(pm);
164: endEm(pm);
165: }
166:
167: private RuntimeTest1 getObject(OpenJPAEntityManager pm) {
168: // return (RuntimeTest1) ((Collection)
169: // pm.createNativeQuery( "stringField == \"TestInitialValueFetching\"",RuntimeTest1.class)
170: // .getResultList()).iterator().next();
171:
172: OpenJPAQuery q = pm
173: .createQuery("SELECT o FROM RuntimeTest1 o WHERE o.stringField = \'TestInitialValueFetching\'");
174: List l = q.getResultList();
175:
176: return (RuntimeTest1) l.iterator().next();
177: }
178: }
|