Package org.skyscreamer.yoga.selector

Source Code of org.skyscreamer.yoga.selector.PropertyResolverTest

package org.skyscreamer.yoga.selector;

import org.junit.Assert;
import org.junit.Test;
import org.skyscreamer.yoga.exceptions.ParseSelectorException;
import org.skyscreamer.yoga.mapper.ResultTraverser;
import org.skyscreamer.yoga.selector.parser.DynamicPropertyResolver;
import org.skyscreamer.yoga.selector.parser.MapSelectorResolver;
import org.skyscreamer.yoga.test.model.basic.DataGenerator;
import org.skyscreamer.yoga.test.model.extended.Artist;
import org.skyscreamer.yoga.test.model.extended.User;
import org.skyscreamer.yoga.test.util.AbstractTraverserTest;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* User: corby
* Date: 5/8/12
*/
public class PropertyResolverTest extends AbstractTraverserTest
{
    @Test
    // Populate a MapSelectorResolver with an aliased selector, and ensure it resolves correctly.
    public void testMapSelectorResolver()
    {
        Map<String,String> definedSelectors = new HashMap<String, String>();
        definedSelectors.put( "$suggestedAlbums", "favoriteArtists(albums(title,songs(id,title)))" );
        MapSelectorResolver mapSelectorResolver = new MapSelectorResolver();
        mapSelectorResolver.setDefinedSelectors( definedSelectors );
        setAliasSelectorResolver( mapSelectorResolver );

        doTestResolver();
    }

    @Test
    // Set up a DynamicPropertyResolver with the Properties file selectorAlias.properties, and ensure it
    // resolves the selector correctly.
    public void testDynamicPropertyResolver() throws IOException
    {
        DynamicPropertyResolver dynamicPropertyResolver = new DynamicPropertyResolver();
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( "selectorAlias.properties" );
        dynamicPropertyResolver.setPropertyFile( is );
        setAliasSelectorResolver( dynamicPropertyResolver );

        doTestResolver();
    }

    @Test (expected=ParseSelectorException.class)
    public void testBadDynamicPropertyResolver() throws ParseSelectorException, IOException
    {
        DynamicPropertyResolver dynamicPropertyResolver = new DynamicPropertyResolver();
        dynamicPropertyResolver.setPropertyFile( new BadInputStream() );
        dynamicPropertyResolver.resolveSelector( "" );
    }

    private void doTestResolver()
    {
        User corby = DataGenerator.corby();
        Artist prince = DataGenerator.prince();
        corby.getFavoriteArtists().add( prince );
        prince.getAlbums().add( DataGenerator.nineteen99() );
        prince.getAlbums().add( DataGenerator.diamondsAndPearls() );

        ResultTraverser traverser = new ResultTraverser();
        Map<String, Object> objectTree = doTraverse( corby, "$suggestedAlbums", traverser );
        Assert.assertEquals( 3, objectTree.size() );
        List<Map<String,Object>> favoriteArtists = getList( objectTree, "favoriteArtists" );
        Assert.assertEquals( 1, favoriteArtists.size() );
        Map<String,Object> princeMap = findItem( favoriteArtists, "name", "Prince" );

        List<Map<String,Object>> albums = getList( princeMap, "albums" );
        Assert.assertEquals( 2, albums.size() );
        Map<String,Object> nineteen99Map = findItem( albums, "title", "1999" );

        List<Map<String,Object>> songs = getList( nineteen99Map, "songs" );
        Assert.assertEquals( 3, songs.size() );
        Map<String,Object> marriedMap = findItem( songs, "id", 12 );

        Assert.assertEquals( 2, marriedMap.size() );
        Assert.assertEquals( "Let's Pretend We're Married", marriedMap.get( "title" ) );
    }

}
TOP

Related Classes of org.skyscreamer.yoga.selector.PropertyResolverTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.