blob: 9adb87b81e63cc600d6b08a98d34da06686676cc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2011 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Oracle Corporation - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jst.jsf.common.metadata.tests.updated;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jst.jsf.common.metadata.Entity;
import org.eclipse.jst.jsf.common.metadata.Model;
import org.eclipse.jst.jsf.common.metadata.Trait;
import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataDomainContext;
import org.eclipse.jst.jsf.common.metadata.query.EmptyResultSet;
import org.eclipse.jst.jsf.common.metadata.query.IEntityQueryVisitor;
import org.eclipse.jst.jsf.common.metadata.query.IResultSet;
import org.eclipse.jst.jsf.common.metadata.query.ITraitQueryVisitor;
import org.eclipse.jst.jsf.common.metadata.query.MetaDataException;
import org.eclipse.jst.jsf.common.metadata.query.internal.AbstractMetaDataQuery;
import org.eclipse.jst.jsf.common.metadata.query.internal.HierarchicalSearchControl;
import org.eclipse.jst.jsf.common.metadata.query.internal.IMetaDataModelManagerContext;
import org.eclipse.jst.jsf.common.metadata.query.internal.IMetaDataQuery;
import org.eclipse.jst.jsf.common.metadata.query.internal.IMetaDataQueryHelper;
import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryContextFactory;
import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryFactory;
import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryHelper;
import org.eclipse.jst.jsf.common.metadata.query.internal.SearchControl;
import org.eclipse.jst.jsf.common.metadata.query.internal.SimpleEntityQueryVisitorImpl;
import org.eclipse.jst.jsf.common.metadata.query.internal.SimpleTraitQueryVisitorImpl;
import org.eclipse.jst.jsf.metadata.tests.MetadataTestsPlugin;
import org.junit.Before;
import org.junit.Test;
public class MetaDataQueryHelperTests extends AbstractBaseMetaDataTestCase {
private IMetaDataQuery _query;
private MetaDataQueryHelper _helper;
@Before
public void setUp() throws Exception {
super.setUp();
IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(project);
_query = MetaDataQueryFactory.getInstance().createQuery(context);
assertNotNull(_query);
_helper = (MetaDataQueryHelper)_query.getQueryHelper();
assertNotNull(_helper);
// baseContext = new TaglibDomainMetaDataModelContextImpl(domain, project, baseTestUri);
// nullProjectContext = new TaglibDomainMetaDataModelContextImpl(domain, null, baseTestUri);
// negativeContextBadUri = new TaglibDomainMetaDataModelContextImpl(domain, project, "blah");
// negativeContextBadDomain = new TaglibDomainMetaDataModelContextImpl(badDomain, project, baseTestUri);
}
/**
* Test getModel method but also performs basic read unit tests on Model
*/
public void testGetModel() {
//base
//positive test
Model model = _helper.getModel(baseTestUri);
assertNotNull(baseTestUri+" model should not be null.",model);
//null proj
IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext((IProject)null);
IMetaDataQuery nullProjectQuery = MetaDataQueryFactory.getInstance().createQuery(context);
model = nullProjectQuery.getQueryHelper().getModel(baseTestUri);
assertNotNull(baseTestUri+" model should not be null.",model);
//id
assertNotNull(model.getId());
assertEquals(baseTestUri+" is not same as model.getId()",baseTestUri, model.getId() );
//negative tests
context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(project);
IMetaDataQuery badUriQuery = MetaDataQueryFactory.getInstance().createQuery(context);
model = badUriQuery.getQueryHelper().getModel("blah");
assertNull(model);
IMetaDataModelManagerContext badContext = new IMetaDataModelManagerContext() {
@SuppressWarnings("rawtypes")
public Object getAdapter(Class adapter) {
if (adapter == IProject.class)
return project;
return null;
}
public String getDomainId() {
return "badDomainKey";
}
public IProject getProject() {
return project;
}
};
MetadataTestsPlugin.getDefault().getLog().log(new Status(IStatus.INFO, MetadataTestsPlugin.ID_BUNDLE, "***** UnsupportedOperationException about to occur because of Test ! *****")); //$NON-NLS-1$
IMetaDataQuery badDomainQuery = MetaDataQueryFactory.getInstance().createQuery(badContext);
assertNull(badDomainQuery);
}
public void testGetEntityIMetaDataModelContextString() {
Model model = _helper.getModel(baseTestUri);
//positive
Entity entity = _helper.getEntity(model, "loaded");
assertNotNull(entity);
entity = _helper.getEntity(model, "loaded/att3");
assertNotNull(entity);
//negative
entity = _helper.getEntity(model, "doesnotexist");
assertNull(entity);
}
/**
* Return multiple entities
* Partially tests SimpleEntityQueryVisitorImpl searchControl
*/
public void testGetEntitiesIMetaDataModelContextStringIEntityQueryVisitor() {
Model model = _helper.getModel(baseTestUri);
IEntityQueryVisitor visitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(1, HierarchicalSearchControl.SCOPE_ALL_LEVELS));
IResultSet rs = _helper.getEntities(model, "loaded", visitor);
assertNotNull(rs);
Entity entity = null;
try {
assertFalse(rs instanceof EmptyResultSet);
assertEquals(1, rs.getResults().size());
entity = (Entity)rs.getResults().get(0);
assertNotNull(entity);
assertEquals(entity.getId(), "loaded");
rs.close();
} catch (MetaDataException e) {
//MetaDataException not currently being thrown
fail(e.getMessage());
}
//test returning multiple (2)
visitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(SearchControl.COUNT_LIMIT_NONE, HierarchicalSearchControl.SCOPE_ALL_LEVELS));
rs = _helper.getEntities(model, "loaded", visitor);
assertNotNull(rs);
try {
assertFalse(rs instanceof EmptyResultSet);
assertEquals(2, rs.getResults().size());
entity = (Entity)rs.getResults().get(0);
assertNotNull(entity);
assertEquals(entity.getId(), "loaded");
Entity secondentity = (Entity)rs.getResults().get(1);
assertNotNull(secondentity);
assertEquals("loaded", secondentity.getId());
assertFalse(secondentity == entity);
rs.close();
} catch (MetaDataException e) {
//MetaDataException not currently being thrown
fail(e.getMessage());
}
}
public void testGetTraitEntityString() {
Model model = _helper.getModel(baseTestUri);
Entity entity = _helper.getEntity(model, "loaded/att3");
//positive
Trait trait = _helper.getTrait(entity, "A3");
assertNotNull(trait);
//negative
trait = _helper.getTrait(entity, "Z3");
assertNull(trait);
}
/**
* Return multiple traits
* Also tests SimpleEntityQueryVisitorImpl and IResultSet
*/
public void testGetTraits() {
//TEST with 1 count
ITraitQueryVisitor visitor = new SimpleTraitQueryVisitorImpl(new SearchControl(1));
Model model = _helper.getModel(baseTestUri);
IResultSet rs = _helper.getTraits(model, "model-trait", visitor);
assertNotNull(rs);
Trait trait = null;
try {
assertFalse(rs instanceof EmptyResultSet);
assertEquals(1, rs.getResults().size());
trait = (Trait)rs.getResults().get(0);
assertNotNull(trait);
assertEquals("model-trait", trait.getId());
rs.close();
} catch (MetaDataException e) {
//MetaDataException not currently being thrown
fail(e.getMessage());
}
//test with COUNT_LIMIT_NONE
visitor = new SimpleTraitQueryVisitorImpl(new SearchControl(SearchControl.COUNT_LIMIT_NONE));
rs = _helper.getTraits(model, "model-trait", visitor);
assertNotNull(rs);
try {
assertFalse(rs instanceof EmptyResultSet);
assertEquals(2, rs.getResults().size());
trait = (Trait)rs.getResults().get(0);
assertNotNull(trait);
assertEquals("model-trait", trait.getId());
Trait secondTrait = (Trait)rs.getResults().get(1);
assertNotNull(secondTrait);
assertEquals("model-trait", secondTrait.getId());
assertFalse(trait == secondTrait);
rs.close();
} catch (MetaDataException e) {
//MetaDataException not currently being thrown
fail(e.getMessage());
}
}
public void testGetEntityEntityString() {
Model model = _helper.getModel(baseTestUri);
Entity entity = _helper.getEntity(model, "loaded");
//positive
entity = _helper.getEntity(entity, "att3");
assertNotNull(entity);
//negative
entity = _helper.getEntity(entity, "zzz");
assertNull(entity);
}
public void testGetEntitiesEntityStringIEntityQueryVisitor() {
//negative test
IResultSet rs = _helper.getEntities("badURI", "foo", new SimpleEntityQueryVisitorImpl());
assertNotNull(rs);
try {
assertEquals(0, rs.getResults().size());
} catch (MetaDataException e) {
fail(e.getMessage());
}
}
public void testGetTraitIMetaDataModelContextStringString() {
//positive
Trait trait = _helper.getTrait(baseTestUri, "loaded/att3", "A3");
assertNotNull(trait);
//negative
trait = _helper.getTrait(baseTestUri, "loaded/att3", "zzz");
assertNull(trait);
trait = _helper.getTrait(baseTestUri, "doesnotexist", "A3");
assertNull(trait);
trait = _helper.getTrait("badDomain", "doesnotexist", "A3");
assertNull(trait);
}
public void testResultSets() {
IResultSet rs = _helper.getEntities(baseTestUri, "loaded", new SimpleEntityQueryVisitorImpl());
assertNotNull(rs);
try {
assertEquals(2, rs.getResults().size());
assertFalse(rs.isClosed());
rs.close();
assertTrue(rs.isClosed());
} catch (MetaDataException e1) {
fail(e1.getMessage());
}
try {
rs.getResults();
fail("Expected MetaDataException ");
} catch (MetaDataException e2) {
//pass
}
}
public void testGetEntityBeyondMDDepth() {
Entity entity = _helper.getEntity(baseTestUri, "loaded/does_not_exist/nor_this");
assertNull(entity);
}
public void testGetEntityBadEntityKey() {
Entity entity = _helper.getEntity(baseTestUri, "");
assertNull(entity);
entity = _helper.getEntity(baseTestUri, null);
assertNull(entity);
entity = _helper.getEntity(baseTestUri, "/");
assertNull(entity);
}
@Test
public void testSubclassability() {
IMetaDataQueryHelper myHelper = new MyMetaDataQueryHelper();
_query.setQueryHelper(myHelper);
assertSame(_query.getQueryHelper(), myHelper);
}
private class MyMetaDataQueryHelper extends MetaDataQueryHelper {
MyMetaDataQueryHelper() {
super(((AbstractMetaDataQuery)_query).getManager(), ((AbstractMetaDataQuery)_query).getDomainContext());
}
}
}