/** * OpenSpotLight - Open Source IT Governance Platform * * Copyright (c) 2009, CARAVELATECH CONSULTORIA E TECNOLOGIA EM INFORMATICA LTDA * or third-party contributors as indicated by the @author tags or express * copyright attribution statements applied by the authors. All third-party * contributions are distributed under license by CARAVELATECH CONSULTORIA E * TECNOLOGIA EM INFORMATICA LTDA. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA * *********************************************************************** * OpenSpotLight - Plataforma de Governança de TI de Código Aberto * * Direitos Autorais Reservados (c) 2009, CARAVELATECH CONSULTORIA E TECNOLOGIA * EM INFORMATICA LTDA ou como contribuidores terceiros indicados pela etiqueta * @author ou por expressa atribuição de direito autoral declarada e atribuída pelo autor. * Todas as contribuições de terceiros estão distribuídas sob licença da * CARAVELATECH CONSULTORIA E TECNOLOGIA EM INFORMATICA LTDA. * * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os * termos da Licença Pública Geral Menor do GNU conforme publicada pela Free Software * Foundation. * * Este programa é distribuído na expectativa de que seja útil, porém, SEM NENHUMA * GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU ADEQUAÇÃO A UMA * FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor do GNU para mais detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto com este * programa; se não, escreva para: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.openspotlight.graph.query; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.isOneOf; import static org.hamcrest.Matchers.not; import java.util.concurrent.Callable; import org.junit.Test; import org.openspotlight.graph.manipulation.GraphReader; import org.openspotlight.graph.test.domain.link.PackageContainsType; import org.openspotlight.graph.test.domain.node.JavaInterface; import org.openspotlight.graph.test.domain.node.JavaPackage; import org.openspotlight.graph.test.domain.node.JavaType; public class SLGraphQueryStackBehaviorTest extends AbstractGeneralQueryTest { @Override protected Callable<Void> createShutdownHandler() { throw new UnsupportedOperationException(); } @Override protected Callable<Void> createStartUpHandler() { throw new UnsupportedOperationException(); } @Override protected GraphReader graphReader() { throw new UnsupportedOperationException(); } @Test public void testVerifyWhereInStack() throws Exception { final QueryApi query2Input = session.createQueryApi(); query2Input.select().type(JavaPackage.class.getName()).selectEnd() .where().type(JavaPackage.class.getName()).each() .property("caption").equalsTo().value("java.util").typeEnd() .whereEnd(); final QueryResult inputResult = query2Input.execute(sortMode, true); final NodeWrapper[] inputWrappers = wrapNodes(inputResult.getNodes()); new AssertResult() { @Override public void execute() { assertThat(inputWrappers.length, is(1)); assertThat(new NodeWrapper(JavaPackage.class.getName(), "queryTest", "java.util"), is(inputWrappers[0])); } }.execute(); printInfo = true; printResult(inputResult.getNodes()); final QueryApi query = session.createQueryApi(); query.select().type(JavaInterface.class.getName()).comma() .byLink(PackageContainsType.class.getName()).b().selectEnd() .select().allTypes().selectEnd().where() .type(JavaType.class.getName()).subTypes().each() .property("caption").contains().value("Map").typeEnd() .whereEnd(); final QueryResult initialData = query.execute(inputResult.getNodes(), sortMode, printInfo); final NodeWrapper[] wrappers = wrapNodes(initialData.getNodes()); new AssertResult() { @Override public void execute() { assertThat(wrappers.length, is(2)); assertThat(new NodeWrapper(JavaInterface.class.getName(), "java.util", "java.util.Map"), isOneOf(wrappers)); assertThat(new NodeWrapper(JavaInterface.class.getName(), "java.util", "java.util.SortedMap"), isOneOf(wrappers)); } }.execute(); printResult(initialData.getNodes()); } @Test public void testVerifyWhereInStack2() throws Exception { final QueryApi query2Input = session.createQueryApi(); query2Input.select().type(JavaPackage.class.getName()).selectEnd() .where().type(JavaPackage.class.getName()).each() .property("caption").equalsTo().value("java.util").typeEnd() .whereEnd(); final QueryResult inputResult = query2Input.execute(sortMode, true); final NodeWrapper[] inputWrappers = wrapNodes(inputResult.getNodes()); printInfo = true; printResult(inputResult.getNodes()); new AssertResult() { @Override public void execute() { assertThat(inputWrappers.length, is(1)); assertThat(new NodeWrapper(JavaPackage.class.getName(), "queryTest", "java.util"), is(inputWrappers[0])); } }.execute(); final QueryApi query = session.createQueryApi(); query.select().type(JavaInterface.class.getName()).comma() .byLink(PackageContainsType.class.getName()).b().selectEnd() .select().allTypes().selectEnd(); final QueryResult initialData = query.execute(inputResult.getNodes(), sortMode, printInfo); final NodeWrapper[] wrappers = wrapNodes(initialData.getNodes()); printResult(initialData.getNodes()); new AssertResult() { @Override public void execute() { assertThat(wrappers.length >= 14, is(true)); } }.execute(); final QueryApi query2Compare = session.createQueryApi(); query2Compare.select().type(JavaInterface.class.getName()).selectEnd() .select().allTypes().selectEnd(); final QueryResult resultData = query2Compare.execute(sortMode, printInfo); final NodeWrapper[] wrappers2 = wrapNodes(resultData.getNodes()); printResult(resultData.getNodes()); new AssertResult() { @Override public void execute() { assertThat(wrappers2.length >= 19, is(true)); } }.execute(); assertThat(wrappers.length, is(not(wrappers2.length))); } @Test public void testVerifyWhereInStack3() throws Exception { final QueryApi query1 = session.createQueryApi(); query1.select().type(JavaInterface.class.getName()).selectEnd(); final QueryResult resultData = query1.execute(sortMode, printInfo); final QueryApi query2 = session.createQueryApi(); query2.select().type(JavaInterface.class.getName()).selectEnd() .select().allTypes().selectEnd(); final QueryResult resultData2 = query2.execute(sortMode, printInfo); assertThat(resultData2.getNodes().size(), is(resultData.getNodes() .size())); } }