blob: 29a7d91f181a8147ad8575a61a9b7593a2caf5fd [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:
// 07/05/2010-2.1.1 Michael O'Brien
// - 321716: modelgen and jpa versions of duplicate code in both copies of
// JUnitCriteriaMetamodelTestSuite must be kept in sync (to avoid only failing on WebSphere under Derby)
// (ideally there should be only one copy of the code - the other suite should reference or subclass for changes)
// see
// org.eclipse.persistence.testing.tests.jpa.criteria.JUnitCriteriaMetamodelTestSuite.simpleModTest():1796
// org.eclipse.persistence.testing.tests.jpa.criteria.metamodel.JUnitCriteriaMetamodelTestSuite.simpleModTest():1766
// - 321902: this copied code should be renamed, merged or subclassed off the original
package org.eclipse.persistence.testing.tests.jpa.criteria;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.persistence.testing.models.jpa.advanced.Address_;
import org.eclipse.persistence.testing.models.jpa.advanced.Employee_;
import org.eclipse.persistence.testing.models.jpa.advanced.LargeProject_;
import org.eclipse.persistence.testing.models.jpa.advanced.PhoneNumber_;
import org.eclipse.persistence.testing.models.jpa.inheritance.Person_;
import org.eclipse.persistence.testing.models.jpa.inheritance.SportsCar_;
import org.eclipse.persistence.testing.models.jpa.inherited.BeerConsumer_;
import org.eclipse.persistence.testing.models.jpa.inherited.BlueLight_;
import jakarta.persistence.Persistence;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Expression;
import jakarta.persistence.criteria.Fetch;
import jakarta.persistence.criteria.Join;
import jakarta.persistence.criteria.JoinType;
import jakarta.persistence.criteria.Path;
import jakarta.persistence.criteria.Root;
import jakarta.persistence.metamodel.Attribute;
import jakarta.persistence.metamodel.CollectionAttribute;
import jakarta.persistence.metamodel.MapAttribute;
import jakarta.persistence.metamodel.SingularAttribute;
import java.util.HashMap;
import static org.eclipse.persistence.testing.tests.jpa.criteria.JUnitCriteriaSimpleTestSuiteBase.Attributes.*;
/**
* @author cdelahun
* Converted from JUnitJPQLSimpleTestSuite
*/
public class JUnitCriteriaMetamodelTestSuite extends JUnitCriteriaSimpleTestSuiteBase<Attribute> {
private final class Wrapper implements CriteriaQueryWrapper {
@Override
public <X,Y> Root<X> from(CriteriaQuery<Y> query, Class<X> entityClass) {
return query.from(entityClass);
}
@Override
@SuppressWarnings("unchecked")
public <X,Y> Fetch<X,Y> fetch(Root<X> root, Attributes attributeKey, JoinType joinType) {
return root.fetch((CollectionAttribute) attributes.get(attributeKey), JoinType.LEFT);
}
@Override
@SuppressWarnings("unchecked")
public <X,Y> Expression<Y> get(Path<X> path, Attributes attributeKey) {
Attribute attribute = attributes.get(attributeKey);
if(SingularAttribute.class.isAssignableFrom(attribute.getClass())) {
return path.get((SingularAttribute) attribute);
}
else {
return path.get((CollectionAttribute) attribute);
}
}
@Override
@SuppressWarnings("unchecked")
public <X,Y> Join<X,Y> join(Root<X> root, Attributes attributeKey) {
Attribute attribute = attributes.get(attributeKey);
if(SingularAttribute.class.isAssignableFrom(attribute.getClass())) {
return root.join((SingularAttribute) attribute);
}
else if(MapAttribute.class.isAssignableFrom(attribute.getClass())) {
return root.join((MapAttribute) attribute);
}
else {
return root.join((CollectionAttribute) attribute);
}
}
@Override
@SuppressWarnings("unchecked")
public <X, Y> Join<X, Y> join(Root<X> root, Attributes attributeKey, JoinType joinType) {
return root.join((SingularAttribute) attributes.get(attributeKey), joinType);
}
}
@Override
protected void setWrapper() {
this.wrapper = new Wrapper();
}
@Override
protected void populateAttributes() {
attributes = new HashMap<>();
attributes.put(Employee_id, Employee_.id);
attributes.put(Employee_firstName, Employee_.firstName);
attributes.put(Employee_lastName, Employee_.lastName);
attributes.put(Employee_salary, Employee_.salary);
attributes.put(Employee_normalHours, Employee_.normalHours);
attributes.put(Employee_phoneNumbers, Employee_.phoneNumbers);
attributes.put(Employee_managedEmployees, Employee_.managedEmployees);
attributes.put(Employee_projects, Employee_.projects);
attributes.put(Employee_address, Employee_.address);
attributes.put(Employee_status, Employee_.status);
attributes.put(Employee_hugeProject, Employee_.hugeProject);
attributes.put(PhoneNumber_number, PhoneNumber_.number);
attributes.put(PhoneNumber_areaCode, PhoneNumber_.areaCode);
attributes.put(PhoneNumber_owner, PhoneNumber_.owner);
attributes.put(Address_street, Address_.street);
attributes.put(Address_postalCode, Address_.postalCode);
attributes.put(Address_city, Address_.city);
attributes.put(LargeProject_budget, LargeProject_.budget);
attributes.put(BeerConsumer_blueBeersToConsume, BeerConsumer_.blueBeersToConsume);
attributes.put(BlueLight_discount, BlueLight_.discount);
attributes.put(Person_car, Person_.car);
attributes.put(SportsCar_maxSpeed, SportsCar_.maxSpeed);
}
public JUnitCriteriaMetamodelTestSuite() {
super();
}
public JUnitCriteriaMetamodelTestSuite(String name) {
super(name);
}
//This suite contains all tests contained in this class
public static Test suite() {
TestSuite suite = (TestSuite) JUnitCriteriaSimpleTestSuiteBase.suite(JUnitCriteriaMetamodelTestSuite.class);
suite.setName("JUnitCriteriaMetamodelTestSuite");
suite.addTest(new JUnitCriteriaMetamodelTestSuite("testNotLoggedIn"));
return suite;
}
public void testNotLoggedIn(){
Persistence.createEntityManagerFactory(getPersistenceUnitName());
assertNotNull(Employee_.address);
}
}