/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.testing.tests.types; import java.util.*; import org.eclipse.persistence.sessions.*; import org.eclipse.persistence.descriptors.RelationalDescriptor; import org.eclipse.persistence.tools.schemaframework.*; import oracle.sql.*; import org.eclipse.persistence.testing.framework.*; import org.eclipse.persistence.internal.platform.database.oracle.TIMESTAMPHelper; //Bug#3950634 Prevent java.lang.ArrayIndexOutOfBoundsException from occuring public class CalendarToTSTZWithoutSessionTZTest extends TypeTester { public Calendar calToTSTZ; public CalendarToTSTZWithoutSessionTZTest () { super("NEW"); } public CalendarToTSTZWithoutSessionTZTest (String nameOfTest, int year, int month, int date, int hrs, int min, int sec, int nano, String zoneId) { super(nameOfTest); calToTSTZ = Calendar.getInstance(TimeZone.getTimeZone(zoneId)); calToTSTZ.set(year, month, date, hrs, min, sec); calToTSTZ.set(Calendar.MILLISECOND, nano / 1000000); } public CalendarToTSTZWithoutSessionTZTest (String nameOfTest, Calendar c) { super(nameOfTest); calToTSTZ = c; } public CalendarToTSTZWithoutSessionTZTest (String nameOfTest, long time) { super(nameOfTest); calToTSTZ = Calendar.getInstance(); calToTSTZ.setTime(new java.util.Date(time)); } public Calendar getCalToTSTZ() { return calToTSTZ; } public void setCalToTSTZ(Calendar calToTSTZ) { this.calToTSTZ = calToTSTZ; } public static RelationalDescriptor descriptor() { RelationalDescriptor descriptor = new RelationalDescriptor(); /* First define the class, table and descriptor properties. */ descriptor.setJavaClass(CalendarToTSTZWithoutSessionTZTest.class); descriptor.setTableName("CALENDARTOTSTZ"); descriptor.setPrimaryKeyFieldName("NAME"); /* Next define the attribute mappings. */ descriptor.addDirectMapping("testName", "getTestName", "setTestName", "NAME"); descriptor.addDirectMapping("calToTSTZ", "CALTOTSTZ"); return descriptor; } public static TableDefinition tableDefinition(Session session) { TableDefinition definition= TypeTester.tableDefinition(); definition.setName("CALENDARTOTSTZ"); definition.addField("CALTOTSTZ", TIMESTAMPTZ.class); return definition; } public String toString() { return getTestName() + " -> " + TIMESTAMPHelper.printCalendar(calToTSTZ); } static public Vector testInstances () { Vector tests = new Vector(); tests.addElement(new CalendarToTSTZWithoutSessionTZTest("NOW", Calendar.getInstance())); tests.addElement(new CalendarToTSTZWithoutSessionTZTest("ZERO", 1900,0,1,0,0,0,0,"GMT")); return tests; } protected void verify(WriteTypeObjectTest testCase) throws TestException { try { super.verify(testCase); } catch (java.lang.ArrayIndexOutOfBoundsException e0) { throw new TestErrorException("The test throws java.lang.ArrayIndexOutOfBoundsException"); } catch (TestException e) { // JConnect in non native mode if (caughtException != null && caughtException.toString().equals("EXCEPTION: org.eclipse.persistence.exceptions.DatabaseException \n"+ "DESCRIPTION: null \n"+ "INTERNAL EXCEPTION: java.sql.SQLException: JZ0S8: An escape sequence in a SQL Query was malformed.\n"+ "ERROR CODE: 0\n\n")) { throw new TestProblemException("JConnect does not do dates in non-native SQL:\n" + caughtException.getInternalException()); } if (testCase.getObjectFromDatabase() == null) { throw new TestErrorException("TIMESTAMPTester throws exception: " + e); } } } }