blob: e940d29fc07075c81081bc6cae3ecf9b8c6a7c99 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 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.tests.queries.report;
import java.util.*;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.queries.*;
/**
* ReportQuery test for Scenario 1.1
* SELECT F_NAME, L_NAME FROM EMPLOYEE
*/
public abstract class ReportQueryTestCase extends AutoVerifyTestCase {
protected ReportQuery reportQuery;
protected Vector expectedResults;
protected Vector results;
protected boolean checkEntrySet = true;
protected void addResult(Object[] values, Object primaryKey) {
Vector results = new Vector(values.length);
for (int index = 0; index < values.length; index++) {
results.add(values[index]);
}
ReportQueryResult result = new ReportQueryResult(results, primaryKey);
expectedResults.addElement(result);
}
protected abstract void buildExpectedResults() throws Exception;
@Override
public String getName() {
return super.getName() + ": " + getDescription();
}
protected void removeFromResult(ReportQueryResult result, Vector expected) {
for (Enumeration e = expected.elements(); e.hasMoreElements();) {
ReportQueryResult expRes = (ReportQueryResult)e.nextElement();
if (result.equals(expRes)) {
expected.removeElement(expRes);
return;
}
}
getSession().logMessage("missing element: " + result);
}
protected boolean isEntrySetOk(ReportQueryResult result) {
try {
Set set = result.entrySet();
if (result.size() != set.size()) {
return false;
}
List names = new ArrayList(result.getNames());
List results = new ArrayList(result.getResults());
Iterator it = set.iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
Object key = entry.getKey();
Object value = entry.getValue();
int index = names.indexOf(key);
if (index == -1) {
return false;
}
if (results.get(index) != value) {
return false;
}
names.remove(index);
results.remove(index);
}
return true;
} catch (Exception ex) {
return false;
}
}
@Override
protected void setup() throws Exception
{
results = new Vector();
expectedResults = new Vector();
buildExpectedResults();
}
@Override
public void test() {
results = (Vector)getSession().executeQuery(reportQuery);
}
@Override
protected void verify() {
getSession().logMessage("results: " + results);
getSession().logMessage("expectedResults: " + expectedResults);
if (results.size() != expectedResults.size()) {
throw new TestErrorException("ReportQuery test failed: The result size are different");
}
Vector cloneResults = (Vector)expectedResults.clone();
for (Enumeration e = results.elements(); e.hasMoreElements();) {
removeFromResult((ReportQueryResult)e.nextElement(), cloneResults);
}
if (cloneResults.size() != 0) {
throw new TestErrorException("ReportQuery test failed: The result didn't match");
}
if (checkEntrySet) {
for (Enumeration e = results.elements(); e.hasMoreElements();) {
if (!isEntrySetOk((ReportQueryResult)e.nextElement())) {
throw new TestErrorException("Problem with ReportQueryResult.entrySet() method");
}
}
}
}
}