| /* |
| * 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.jdo.tck.enhancement; |
| |
| import java.io.PrintWriter; |
| import java.util.Arrays; |
| import java.util.List; |
| |
| import org.apache.jdo.impl.enhancer.util.AnnotationTest; |
| import org.apache.jdo.tck.util.BatchTestRunner; |
| |
| /** |
| *<B>Title:</B> FieldAccessModified |
| *<BR> |
| *<B>Keywords:</B> enhancement |
| *<BR> |
| *<B>Assertion ID:</B> . |
| *<BR> |
| *<B>Assertion Description: </B> |
| The enhancer modifies field accesses to guarantee that the values of fields |
| are retrieved from the data store prior to application usage. |
| <OL TYPE="A"> |
| <LI>For any field access that reads the value of a field, the getfield byte code |
| is replaced with a call to a generated local method, <code>jdoGetXXX</code></LI> |
| <LI>For any field access that stores the new value of a field, the putfield |
| byte code is replaced with a call to a generated local method, |
| <code>jdoSetXXX</code></LI> |
| </OL> |
| |
| */ |
| |
| public class FieldAccessModified extends EnhancerTest { |
| |
| /** */ |
| private static final String ASSERTION_FAILED = |
| "Assertion (FieldAccessModified) 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(FieldAccessModified.class); |
| } |
| |
| |
| /** */ |
| public void test() { |
| if (debug) |
| logger.debug("org.apache.jdo.tck.enhancement.FieldAccessModified.run"); |
| PMFPropertiesObject = loadProperties(PMFProperties); // will exit here if no properties |
| runTestAllPackages(); |
| } |
| |
| /** */ |
| protected void runTestOnePackage (String packageName, List classNames) { |
| if (debug) |
| logger.debug("FieldAccessModified.testOnePackage: " + |
| packageName + " classes " + classNames); |
| |
| PrintWriter out = new PrintWriter(System.out); |
| final AnnotationTest test = new AnnotationTest(out, out); |
| final String classpath = System.getProperty("java.class.path"); |
| final String jdoPropertiesFileName = |
| packageName.replace ('.', '/') + "/jdoTest.properties"; //NOI18N |
| final String[] args = new String[classNames.size() + 6]; |
| int index = 0; |
| // init arguments for AnnotationTest.run call |
| // specify properties file |
| args[index++] = "--properties"; |
| args[index++] = jdoPropertiesFileName; |
| // specify jdo path to find the properties file |
| args[index++] = "-j"; |
| args[index++] = classpath; |
| // specify source path to find the classes |
| args[index++] = "-s"; |
| args[index++] = classpath; |
| // add class names |
| for (java.util.Iterator i = classNames.iterator(); i.hasNext();) { |
| args[index++] = (String)i.next(); |
| } |
| if (debug) |
| logger.debug ("Run AnnotationTest with args " + Arrays.asList(args)); |
| int errors = test.run(args); |
| if (errors > 0) { |
| fail(ASSERTION_FAILED, |
| "AnnotationTest with args " + Arrays.asList(args) + |
| " results in " + errors + " errors."); |
| } |
| } |
| } |