I would prefer a patch file instead of the full file. I.e. generate it out of git and mail it. That's how distributed SCM is supposed to work :-)
Cheers Niclas On Tue, May 25, 2010 at 5:31 AM, Stanislav Muhametsin <[email protected]> wrote: > Hi, > > I noticed that there is a typo in class > org.qi4j.test.indexing.AbstractQueryTest, method script32(). It compares > line2() instead of line1(). I used this method in one my tests. Could the > core team change that? > > Additionally, could the core team also add the class attached to this > message? I wanted to test some more complex queries to the SQL indexing > component, and still be able to use the Qi4j-testsupport's test-data, so > this class needs to be placed there, in pacakge org.qi4j.test.indexing. > Thanks in advance. > > Fyi, in the current state, the SQL indexing passes all tests in > AbstractQueryTest, AbstractEntityFinderTest, and AbstractComplexQueryTest. I > guess after some code cleanup it could be merged from sandbox into actual > Qi4j repositories. Is there some kind of procedure for that? Do I need to > ask permissions from someone or anything like that? > > /* > * Copyright (c) 2010, Stanislav Muhametsin. All Rights Reserved. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > * You may obtain a copy of the License at > http://www.apache.org/licenses/LICENSE-2.0 > * Unless required by applicable law or agreed to in writing, software > * distributed under the License is distributed on an "AS IS" BASIS, > * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > * See the License for the specific language governing permissions and > * limitations under the License. > * > */ > > > package org.qi4j.test.indexing; > > import static org.hamcrest.CoreMatchers.equalTo; > import static org.junit.Assert.assertThat; > import static org.junit.Assert.assertTrue; > import static org.junit.Assert.fail; > > import java.io.IOException; > import java.util.ArrayList; > import java.util.Arrays; > import java.util.Collection; > import java.util.List; > > import org.junit.After; > import org.junit.Before; > import org.junit.Test; > import org.qi4j.api.property.Property; > import org.qi4j.api.query.Query; > import org.qi4j.api.query.QueryBuilder; > import org.qi4j.api.query.QueryBuilderFactory; > import org.qi4j.api.service.ServiceFinder; > import org.qi4j.api.unitofwork.UnitOfWork; > import org.qi4j.api.unitofwork.UnitOfWorkCompletionException; > import org.qi4j.api.value.ValueBuilder; > import org.qi4j.api.value.ValueBuilderFactory; > import org.qi4j.bootstrap.AssemblyException; > import org.qi4j.bootstrap.ModuleAssembly; > import org.qi4j.bootstrap.SingletonAssembler; > import org.qi4j.spi.query.IndexExporter; > import org.qi4j.spi.structure.ApplicationSPI; > import org.qi4j.test.EntityTestAssembler; > import org.qi4j.test.indexing.model.Address; > import org.qi4j.test.indexing.model.File; > import org.qi4j.test.indexing.model.Host; > import org.qi4j.test.indexing.model.Nameable; > import org.qi4j.test.indexing.model.Person; > import org.qi4j.test.indexing.model.Port; > import org.qi4j.test.indexing.model.Protocol; > import org.qi4j.test.indexing.model.QueryParam; > import org.qi4j.test.indexing.model.URL; > import org.qi4j.test.indexing.model.entities.AccountEntity; > import org.qi4j.test.indexing.model.entities.CatEntity; > import org.qi4j.test.indexing.model.entities.CityEntity; > import org.qi4j.test.indexing.model.entities.DomainEntity; > import org.qi4j.test.indexing.model.entities.FemaleEntity; > import org.qi4j.test.indexing.model.entities.MaleEntity; > > import static org.hamcrest.CoreMatchers.*; > import static org.junit.Assert.*; > import static org.qi4j.api.query.QueryExpressions.*; > > /** > * > * @author Stanislav Muhametsin > */ > public abstract class AbstractComplexQueryTest > { > private SingletonAssembler assembler; > private QueryBuilderFactory qbf; > private ValueBuilderFactory vbf; > protected UnitOfWork unitOfWork; > > private static final String ANN = "Ann Doe"; > private static final String JOE = "Joe Doe"; > private static final String JACK = "Jack Doe"; > > �...@before > public void setUp() > throws UnitOfWorkCompletionException > { > assembler = new SingletonAssembler() > { > public void assemble( ModuleAssembly module ) > throws AssemblyException > { > module.addEntities( > MaleEntity.class, > FemaleEntity.class, > CityEntity.class, > DomainEntity.class, > AccountEntity.class, > CatEntity.class > ); > module.addValues( > URL.class, > Address.class, > Protocol.class, > Host.class, > Port.class, > File.class, > QueryParam.class > ); > new EntityTestAssembler().assemble( module ); > setupTest( module ); > } > }; > TestData.populate( assembler ); > unitOfWork = assembler.unitOfWorkFactory().newUnitOfWork(); > > qbf = assembler.queryBuilderFactory(); > vbf = assembler.valueBuilderFactory( ); > } > > protected abstract void setupTest( ModuleAssembly mainModule ) > throws AssemblyException; > > protected abstract void tearDownTest(); > > �...@after > public void tearDown() > throws Exception > { > tearDownTest(); > if( assembler != null ) > { > ApplicationSPI app = assembler.application(); > app.passivate(); > } > } > > private static void verifyUnorderedResults( final Iterable<? extends > Nameable> results, final String... names ) > { > final List<String> expected = new ArrayList<String>( Arrays.asList( > names ) ); > > for ( Nameable entity : results ) > { > String name = entity.name( ).get( ); > assertTrue( name + " returned but not expected", expected.remove( > name ) ); > } > > for ( String notReturned : expected ) > { > fail( notReturned + " was expected but not returned" ); > } > } > > private static void verifyOrderedResults( final Iterable<? extends > Nameable> results, final String... names ) > { > final List<String> expected = new ArrayList<String>( Arrays.asList( > names ) ); > final List<String> actual = new ArrayList<String>( ); > for ( Nameable result : results ) > { > actual.add( result.name( ).get( ) ); > } > > assertThat( "Result is incorrect", actual, equalTo( expected ) ); > } > > �...@test > public void showNetwork() > throws IOException > { > ServiceFinder serviceFinder = assembler.serviceFinder(); > IndexExporter indexerExporter = > serviceFinder.<IndexExporter>findService( IndexExporter.class > ).get(); > indexerExporter.exportReadableToStream( System.out ); > } > > �...@test > public void script01() > { > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Address> addressProp = templateFor( Person.class ).address( > ); > > ValueBuilder<Address> addressBuilder = vbf.newValueBuilder( > Address.class ); > Address address = addressBuilder.prototype(); > address.line1().set( "Qi Street 4j" ); > address.line2().set( "Off main Java Street" ); > address.zipcode().set( "12345" ); > > qb = qb.where( eq( addressProp, addressBuilder.newInstance( ) )); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script01: " + query ); > > verifyUnorderedResults( query, ANN ); > } > > �...@test > public void script02() > { > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Address> addressProp = templateFor( Person.class ).address( > ); > > ValueBuilder<Address> addressBuilder = vbf.newValueBuilder( > Address.class ); > Address address = addressBuilder.prototype(); > address.line1().set( "Qi Street 4j" ); > address.line2().set( "Off main Java Street" ); > address.zipcode().set( "12345" ); > > qb = qb.where( not( eq( addressProp, addressBuilder.newInstance( ) > ))); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script02: " + query ); > > verifyUnorderedResults( query , JOE, JACK); > } > > �...@test > public void script03() > { > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > List<QueryParam> queryParams = new ArrayList<QueryParam>(); > QueryParam param = queryParamBuilder.prototype(); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > queryParams.add( queryParamBuilder.newInstance() ); > param.name().set( "password" ); > param.value().set( "somepassword" ); > queryParams.add( queryParamBuilder.newInstance() ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Collection<QueryParam>> paramsProp = templateFor( > Person.class ).personalWebsite( ).get( ).queryParams( ); > qb = qb.where( eq( paramsProp, queryParams) ); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script03: " + query ); > > verifyUnorderedResults( query, JACK ); > } > > �...@test > public void script04() > { > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > List<QueryParam> queryParams = new ArrayList<QueryParam>(); > QueryParam param = queryParamBuilder.prototype(); > // Different order > param.name().set( "password" ); > param.value().set( "somepassword" ); > queryParams.add( queryParamBuilder.newInstance() ); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > queryParams.add( queryParamBuilder.newInstance() ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Collection<QueryParam>> paramsProp = templateFor( > Person.class ).personalWebsite( ).get( ).queryParams( ); > qb = qb.where( eq( paramsProp, queryParams) ); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script04: " + query ); > > verifyUnorderedResults( query ); > } > > �...@test > public void script05() > { > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > List<QueryParam> queryParams = new ArrayList<QueryParam>(); > QueryParam param = queryParamBuilder.prototype(); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > queryParams.add( queryParamBuilder.newInstance() ); > param.name().set( "password" ); > param.value().set( "somepassword" ); > queryParams.add( queryParamBuilder.newInstance() ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Collection<QueryParam>> paramsProp = templateFor( > Person.class ).personalWebsite( ).get( ).queryParams( ); > qb = qb.where( not( eq( paramsProp, queryParams) ) ); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script05: " + query ); > > verifyUnorderedResults( query, ANN, JOE ); > } > > �...@test > public void script06() > { > ValueBuilder<URL> urlBuilder = vbf.newValueBuilder( URL.class ); > ValueBuilder<Protocol> protocolBuilder = vbf.newValueBuilder( > Protocol.class ); > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > > Protocol protocol = protocolBuilder.prototype(); > protocol.value().set( "http" ); > > List<QueryParam> queryParams = new ArrayList<QueryParam>(); > QueryParam param = queryParamBuilder.prototype(); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > queryParams.add( queryParamBuilder.newInstance() ); > param.name().set( "password" ); > param.value().set( "somepassword" ); > queryParams.add( queryParamBuilder.newInstance() ); > > URL url = urlBuilder.prototype(); > url.protocol().set( protocolBuilder.newInstance() ); > url.queryParams().set( queryParams ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<URL> websiteProp = templateFor( > Person.class).personalWebsite( ); > qb = qb.where( eq (websiteProp, urlBuilder.newInstance( )) ); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script06: " + query ); > > verifyUnorderedResults( query, JACK ); > } > > �...@test > public void script07() > { > ValueBuilder<URL> urlBuilder = vbf.newValueBuilder( URL.class ); > ValueBuilder<Protocol> protocolBuilder = vbf.newValueBuilder( > Protocol.class ); > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > > Protocol protocol = protocolBuilder.prototype(); > protocol.value().set( "http" ); > > List<QueryParam> queryParams = new ArrayList<QueryParam>(); > QueryParam param = queryParamBuilder.prototype(); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > queryParams.add( queryParamBuilder.newInstance() ); > param.name().set( "password" ); > param.value().set( "somepassword" ); > queryParams.add( queryParamBuilder.newInstance() ); > > URL url = urlBuilder.prototype(); > url.protocol().set( protocolBuilder.newInstance() ); > url.queryParams().set( queryParams ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<URL> websiteProp = templateFor( > Person.class).personalWebsite( ); > qb = qb.where( not( eq( websiteProp, urlBuilder.newInstance( ) ) ) ); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script07: " + query ); > > verifyUnorderedResults( query, ANN, JOE ); > } > > �...@test > public void script08() > { > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > QueryParam param = queryParamBuilder.prototype(); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Collection<QueryParam>> paramsProp = templateFor( > Person.class ).personalWebsite( ).get( ).queryParams( ); > qb = qb.where( contains( paramsProp, queryParamBuilder.newInstance( ) > ) ); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script08: " + query ); > verifyUnorderedResults( query, JACK ); > } > > �...@test > public void script09() > { > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > > QueryParam param = queryParamBuilder.prototype(); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Collection<QueryParam>> paramsProp = templateFor( > Person.class ).personalWebsite( ).get( ).queryParams( ); > qb = qb.where( not (contains( paramsProp, > queryParamBuilder.newInstance( ) ) )); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script09: " + query ); > verifyUnorderedResults( query, ANN, JOE ); > } > > �...@test > public void script10() > { > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > > List<QueryParam> queryParams = new ArrayList<QueryParam>(); > QueryParam param = queryParamBuilder.prototype(); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > queryParams.add( queryParamBuilder.newInstance() ); > param.name().set( "password" ); > param.value().set( "somepassword" ); > queryParams.add( queryParamBuilder.newInstance( ) ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Collection<QueryParam>> paramsProp = templateFor( > Person.class ).personalWebsite( ).get( ).queryParams( ); > qb = qb.where( containsAll( paramsProp, queryParams ) ); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script10: " + query ); > verifyUnorderedResults( query, JACK ); > > } > > �...@test > public void script11() > { > ValueBuilder<QueryParam> queryParamBuilder = vbf.newValueBuilder( > QueryParam.class ); > > List<QueryParam> queryParams = new ArrayList<QueryParam>(); > QueryParam param = queryParamBuilder.prototype(); > param.name().set( "user" ); > param.value().set( "jackdoe" ); > queryParams.add( queryParamBuilder.newInstance() ); > param.name().set( "password" ); > param.value().set( "somepassword" ); > queryParams.add( queryParamBuilder.newInstance( ) ); > > QueryBuilder<Person> qb = qbf.newQueryBuilder( Person.class ); > Property<Collection<QueryParam>> paramsProp = templateFor( > Person.class ).personalWebsite( ).get( ).queryParams( ); > qb = qb.where( not( containsAll( paramsProp, queryParams ) ) ); > Query<Person> query = qb.newQuery( unitOfWork ); > System.out.println( "*** script11: " + query ); > verifyUnorderedResults( query, ANN, JOE ); > } > } > > _______________________________________________ > qi4j-dev mailing list > [email protected] > http://lists.ops4j.org/mailman/listinfo/qi4j-dev > > -- Niclas Hedhman, Software Developer http://www.qi4j.org - New Energy for Java I live here; http://tinyurl.com/2qq9er I work here; http://tinyurl.com/2ymelc I relax here; http://tinyurl.com/2cgsug _______________________________________________ qi4j-dev mailing list [email protected] http://lists.ops4j.org/mailman/listinfo/qi4j-dev

