Package org.lilyproject.indexer.model.indexerconf.test

Source Code of org.lilyproject.indexer.model.indexerconf.test.NameTemplateTest

/*
* Copyright 2012 NGDATA nv
*
* 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.lilyproject.indexer.model.indexerconf.test;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.google.common.collect.Sets;
import org.junit.Test;
import org.lilyproject.indexer.model.indexerconf.DynamicFieldNameTemplateResolver;
import org.lilyproject.indexer.model.indexerconf.DynamicFieldNameTemplateValidator;
import org.lilyproject.indexer.model.indexerconf.FieldNameTemplateValidator;
import org.lilyproject.indexer.model.indexerconf.NameTemplate;
import org.lilyproject.indexer.model.indexerconf.NameTemplateEvaluationException;
import org.lilyproject.indexer.model.indexerconf.NameTemplateException;
import org.lilyproject.indexer.model.indexerconf.NameTemplateParser;
import org.lilyproject.indexer.model.indexerconf.NameTemplateResolver;
import org.lilyproject.indexer.model.indexerconf.NameTemplateValidator;
import org.lilyproject.repository.api.QName;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;


/**
* Broken during refactoring
* Should be able to fix this if we move helper methods like IndexerConfBuilder.parseQName() to a shared component
*/
public class NameTemplateTest {

    @Test
    public void testLiteral() throws Exception {
        NameTemplate template = new NameTemplateParser().parse("foobar", defaultValidator());
        assertEquals("foobar", template.format(getResolver()));
    }

    @Test
    public void testVar() throws Exception {
        NameTemplate template = new NameTemplateParser().parse("${var1}", defaultValidator());
        assertEquals("hello", template.format(getResolver()));
    }

    @Test
    public void testEmbeddedVar() throws Exception {
        NameTemplate template = new NameTemplateParser().parse("prefix_${var1}_suffix", defaultValidator());
        assertEquals("prefix_hello_suffix", template.format(getResolver()));
    }

    @Test
    public void testCond() throws Exception {
        NameTemplate template = new NameTemplateParser().parse("${list?yes:no}", defaultValidator());
        assertEquals("yes", template.format(getResolver()));

        template = new NameTemplateParser().parse("${multiValue?yes:no}", defaultValidator());
        assertEquals("no", template.format(getResolver()));

        template = new NameTemplateParser().parse("${multiValue?yes}", defaultValidator());
        assertEquals("", template.format(getResolver()));

        template = new NameTemplateParser().parse("${list?yes}", defaultValidator());
        assertEquals("yes", template.format(getResolver()));

        // test with disabled validator because we want it to fail @ evaluation time
        template = new NameTemplateParser().parse("${var1?yes:no}", disabledValidator());
        try {
            assertEquals("no", template.format(getResolver()));
            fail("Expected exception");
        } catch (NameTemplateEvaluationException e) {
            // expected
        }

        // test with disabled validator because we want it to fail @ evaluation time
        template = new NameTemplateParser().parse("${nonexisting?yes:no}", disabledValidator());
        try {
            assertEquals("no", template.format(getResolver()));
            fail("Expected exception");
        } catch (NameTemplateEvaluationException e) {
            // expected
        }
    }

    @Test
    public void testCondEmbedded() throws Exception {
        NameTemplate template = new NameTemplateParser().parse("prefix_${list?yes:no}_suffix", defaultValidator());
        assertEquals("prefix_yes_suffix", template.format(getResolver()));
    }

    @Test
    public void testIncompleteExpr() throws Exception {
        NameTemplate template = new NameTemplateParser().parse("${", defaultValidator());
        assertEquals("${", template.format(getResolver()));

        template = new NameTemplateParser().parse("x${x${x", defaultValidator());
        assertEquals("x${x${x", template.format(getResolver()));

        template = new NameTemplateParser().parse("x${}", defaultValidator());
        assertEquals("x${}", template.format(getResolver()));

        // test with disabled validator because we want it to fail @ evaluation time
        template = new NameTemplateParser().parse("x${?}", disabledValidator());
        try {
            assertEquals("x${?}", template.format(getResolver()));
            fail("expected exception");
        } catch (NameTemplateEvaluationException e) {
            // expected
        }

        // test with disabled validator because we want it to fail @ evaluation time
        template = new NameTemplateParser().parse("x${a?}", disabledValidator());
        try {
            assertEquals("x${a?}", template.format(getResolver()));
            fail("expected exception");
        } catch (NameTemplateEvaluationException e) {
            // expected
        }
    }

    @Test(expected = NameTemplateException.class)
    public void testInvalidExpressionNoSuchBooleanVariable() throws Exception {
        new NameTemplateParser().parse("${foo?true:false}", new DynamicFieldNameTemplateValidator(null));
    }

    @Test(expected = NameTemplateException.class)
    public void testInvalidExpressionNoSuchVariable() throws Exception {
        new NameTemplateParser().parse("${variable}",
                new DynamicFieldNameTemplateValidator(Sets.newHashSet("anothervariable")));
    }

    @Test(expected = NameTemplateException.class)
    public void testInvalidExpressionNoSuchVariantProperty() throws Exception {
        new NameTemplateParser().parse("${vprop:foo}",
                new FieldNameTemplateValidator(Sets.newHashSet("bar"), Collections.<QName>emptySet()));
    }

    private NameTemplateValidator defaultValidator() {
        return new DynamicFieldNameTemplateValidator(defaultContext().keySet());
    }

    private NameTemplateValidator disabledValidator() {
        return new DynamicFieldNameTemplateValidator(null, null);
    }

    public NameTemplateResolver getResolver() {
        return new DynamicFieldNameTemplateResolver(defaultContext());
    }

    private Map<String, Object> defaultContext() {
        Map<String, Object> context = new HashMap<String, Object>();
        context.put("var1", "hello");
        context.put("list", Boolean.TRUE);
        context.put("multiValue", Boolean.FALSE);
        return context;
    }
}
TOP

Related Classes of org.lilyproject.indexer.model.indexerconf.test.NameTemplateTest

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.