blob: b84d1a37dbb04f19300d8eb961abdd73595b5b0c [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.oxm.xmlmarshaller;
import java.io.StringWriter;
import java.util.Vector;
import junit.textui.TestRunner;
import org.eclipse.persistence.exceptions.DescriptorException;
import org.eclipse.persistence.exceptions.IntegrityException;
import org.eclipse.persistence.exceptions.ValidationException;
import org.eclipse.persistence.mappings.DirectToFieldMapping;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.eis.mappings.EISDirectMapping;
import org.eclipse.persistence.oxm.XMLMarshaller;
import org.eclipse.persistence.oxm.XMLUnmarshaller;
import org.eclipse.persistence.oxm.XMLContext;
import org.eclipse.persistence.exceptions.XMLMarshalException;
import org.eclipse.persistence.sessions.Project;
import org.eclipse.persistence.testing.oxm.OXTestCase;
public class XMLMarshallerCreateTestCases extends OXTestCase {
private static String SESSION_NAME = "XMLMarshallerTestSession";
private static String SESSION_NAME2 = "XMLMarshallerTestSession2";
public XMLMarshallerCreateTestCases(String name) {
super(name);
}
public static void main(String[] args) {
String[] arguments = { "-c", "org.eclipse.persistence.testing.oxm.xmlmarshaller.XMLMarshallerCreateTestCases" };
TestRunner.main(arguments);
}
/**
* Create an XMLMarshaller with a session name that does not exist in the sessions.xml file
* An XMLValidation exception should be thrown from the XMLMarshaller constructor
*/
public void testInvalidSessionName() {
String sessionName = "invalidSessionName";
try {
XMLContext context = new XMLContext(sessionName);
} catch (ValidationException exception) {
assertTrue("A session not found exception should have been caught but wasn't.", exception.getErrorCode() == ValidationException.NO_SESSION_FOUND);
return;
} catch (Exception e) {
assertTrue("A session not found exception should have been caught but wasn't.", false);
}
assertTrue("A session not found exception should have been caught but wasn't.", false);
}
public void testInvalidMappingTypeEIS() {
Project project = new Project();
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Car.class);
descriptor.setDefaultRootElement("test");
EISDirectMapping mapping = new EISDirectMapping();
mapping.setAttributeName("license");
mapping.setXPath("license");
descriptor.addMapping(mapping);
project.addDescriptor(descriptor);
try {
XMLContext context = new XMLContext(project);
} catch (DescriptorException exception) {
assertTrue("An invalid mapping type exception should have been caught but wasn't.", exception.getErrorCode() == DescriptorException.INVALID_MAPPING_TYPE);
return;
} catch (IntegrityException exception) {
Vector exceptions = exception.getIntegrityChecker().getCaughtExceptions();
assertTrue("Too many exceptions were found...should have been 1.", exceptions.size() == 1);
Exception e = (Exception)exceptions.elementAt(0);
assertTrue("A DescriptorException should have been caught but wasn't.", e.getClass() == DescriptorException.class);
assertTrue("An invalid mapping type exception should have been caught but wasn't.", ((DescriptorException)e).getErrorCode() == DescriptorException.INVALID_MAPPING_TYPE);
return;
}
assertTrue("An invalid mapping type exception should have been caught but wasn't.", false);
}
public void testInvalidMappingTypeRelational() {
Project project = new Project();
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Car.class);
descriptor.setDefaultRootElement("test");
DirectToFieldMapping mapping = new DirectToFieldMapping();
mapping.setAttributeName("license");
mapping.setFieldName("license");
descriptor.addMapping(mapping);
project.addDescriptor(descriptor);
try {
XMLContext context = new XMLContext(project);
} catch (DescriptorException exception) {
assertTrue("An invalid mapping type exception should have been caught but wasn't.", exception.getErrorCode() == DescriptorException.INVALID_MAPPING_TYPE);
return;
} catch (IntegrityException exception) {
Vector exceptions = exception.getIntegrityChecker().getCaughtExceptions();
assertTrue("Too many exceptions were found...should have been 1.", exceptions.size() == 1);
Exception e = (Exception)exceptions.elementAt(0);
assertTrue("A DescriptorException should have been caught but wasn't.", e.getClass() == DescriptorException.class);
assertTrue("An invalid mapping type exception should have been caught but wasn't.", ((DescriptorException)e).getErrorCode() == DescriptorException.INVALID_MAPPING_TYPE);
return;
}
assertTrue("An invalid mapping type exception should have been caught but wasn't.", false);
}
/**
* Create an XMLMarshaller with 2 session names separated by a semi-colon
* Ensure that objects from each of the 2 projects/sessions can be marshalled
*/
public void testMultipleSessionNames() {
String sessionName = SESSION_NAME + ":" + SESSION_NAME2;
XMLContext context = new XMLContext(sessionName);
assertNotNull(context);
XMLMarshaller marshaller = context.createMarshaller();
StringWriter writer1 = new StringWriter();
marshaller.marshal(new Employee(), writer1);
StringWriter writer2 = new StringWriter();
marshaller.marshal(new Car(), writer2);
}
/**
* Create an XMLMarshaller with 2 session names separated by an invalid delimiter
* only semi-colons are valid delimiters.
* The XMLMarshaller constructor should throw an XMLValidation exception
*/
public void testMultipleSessionNamesInvalidDelimiter() {
String sessionName = SESSION_NAME + ";" + SESSION_NAME2;
try {
XMLContext context = new XMLContext(sessionName);
} catch (ValidationException exception) {
assertTrue("A session not found exception should have been caught but wasn't.", exception.getErrorCode() == ValidationException.NO_SESSION_FOUND);
return;
} catch (Exception e) {
assertTrue("A session not found exception should have been caught but wasn't.", false);
}
assertTrue("A session not found exception should have been caught but wasn't", false);
}
/**
* Create a new XMLMarshaller with a project instead of a session.
* Make sure that an object can be marshalled without exception.
*/
public void testProject() {
XMLMarshaller marshaller = null;
XMLContext context = getXMLContext(new XMLMarshallerTestProject());
assertNotNull(context);
marshaller = context.createMarshaller();
StringWriter writer1 = new StringWriter();
marshaller.marshal(new Employee(), writer1);
}
public void testSessionWithEventListener()
{
XMLMarshallerEventListener.eventTriggered = false;
XMLContext context = new XMLContext("XMLMarshallerEventsTestSession");
assertTrue("The postLogin SessionEvent was not triggered", XMLMarshallerEventListener.eventTriggered);
}
}