Package com.technophobia.substeps.runner

Source Code of com.technophobia.substeps.runner.TagManagerTest

/*
*  Copyright Technophobia Ltd 2012
*
*   This file is part of Substeps.
*
*    Substeps is free software: you can redistribute it and/or modify
*    it under the terms of the GNU Lesser General Public License as published by
*    the Free Software Foundation, either version 3 of the License, or
*    (at your option) any later version.
*
*    Substeps 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 Substeps.  If not, see <http://www.gnu.org/licenses/>.
*/
package com.technophobia.substeps.runner;

import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;

import com.google.common.collect.Sets;
import com.technophobia.substeps.model.FeatureFile;
import com.technophobia.substeps.model.Scenario;
import com.technophobia.substeps.steps.TestStepImplementations;

/**
*
* @author imoore
*
*/
public class TagManagerTest {

    final Set<String> empty = Collections.emptySet();

    @Test
    public void testEmptyTagManager() {

        final TagManager tMgr = new TagManager("");

        Assert.assertTrue(tMgr.acceptTaggedScenario(empty));
        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred")));
        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred", "@bob")));

    }

    @Test
    public void testNonEmptyTagManager() {
        final String runTags = "@bob";

        final TagManager tMgr = new TagManager(runTags);

        Assert.assertFalse(tMgr.acceptTaggedScenario(empty));
        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred")));
        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@bob")));
        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred", "@bob")));

    }

    @Test
    public void testAndedTagManager() {
        final String runTags = "@bob @fred";

        final TagManager tMgr = new TagManager(runTags);

        Assert.assertFalse(tMgr.acceptTaggedScenario(empty));
        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred")));
        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@bob")));
        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred", "@bob")));

    }

    @Test
    public void testNegativeTags() {
        final String runTags = "--@fred";

        final TagManager tMgr = new TagManager(runTags);

        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred")));
        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred", "@bob")));
        Assert.assertTrue(tMgr.acceptTaggedScenario(empty));
        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@bob")));

    }

    @Test
    public void testPositiveTagOverlay() {
        final String runTags = "@fred --@bob";

        final TagManager tMgr = new TagManager(runTags);

        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred")));
        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@bob")));
        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@bill")));

        tMgr.insertTagOverlay("@bill @bob");
        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@bill", "@fred", "@bob")));
    }

    @Test
    public void testNegativeTagOverlay() {
        final String runTags = "--@fred";

        final TagManager tMgr = new TagManager(runTags);

        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred")));
        Assert.assertTrue(tMgr.acceptTaggedScenario(Sets.newHashSet("@bob")));

        tMgr.insertTagOverlay("--@bob");
        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@fred")));
        Assert.assertFalse(tMgr.acceptTaggedScenario(Sets.newHashSet("@bob")));
    }

    @Test
    @Ignore
    public void testRegEx() {
        final String input = "@bob @fred & @wilma | @george";

        final String splitPattern = "([ ,&\\|])+";

        final String[] split = input.split(splitPattern);

        for (final String s : split) {
            System.out.println(s);
        }

        final Pattern p = Pattern.compile(splitPattern);
        final Matcher m = p.matcher(input);

        final int groupCount = m.groupCount();

        System.out.println("groupCount: " + groupCount);

        if (m.lookingAt()) {

            for (int i = 0; i <= groupCount; i++) {
                System.out.println("group[" + i + "]: " + m.group(i));
            }
        } else {
            System.out.println("no match");
        }

    }

    @Test
    public void testTagAnnotations() {

        final List<Class<?>> stepImplsList = new ArrayList<Class<?>>();
        stepImplsList.add(TestStepImplementations.class);

        // pass in the stuff that would normally be placed in the annotation

        final TagManager tagManager = new TagManager(null);
        final TestParameters testParams = new TestParameters(tagManager, null,
                "./target/test-classes/features/tagged.feature");
        testParams.init();

        List<FeatureFile> featureFileList = testParams.getFeatureFileList();

        List<Scenario> scenarios = featureFileList.get(0).getScenarios();
        Assert.assertThat(scenarios.size(), is(4));

        for (final Scenario sc : scenarios) {
            if (!tagManager.acceptTaggedScenario(sc.getTags())) {
                Assert.fail("all scenarios should be runnable");
            }
        }

        final TagManager tagManager2 = new TagManager("@runme");
        final TestParameters testParams2 = new TestParameters(tagManager2, null,
                "./target/test-classes/features/tagged.feature");
        testParams2.init();

        featureFileList = testParams2.getFeatureFileList();

        scenarios = featureFileList.get(0).getScenarios();
        Assert.assertThat(scenarios.size(), is(4));

        final Set<String> excludedTaggedScenarios = new HashSet<String>();

        excludedTaggedScenarios.add("An excluded tagged scenario");
        excludedTaggedScenarios.add("An untagged scenario");
        excludedTaggedScenarios.add("multilined tagged scenario");

        for (final Scenario sc : scenarios) {

            if (tagManager2.acceptTaggedScenario(sc.getTags())) {
                // if (runner.isRunnable(sc)) {
                Assert.assertThat(sc.getDescription(), is("A tagged scenario"));
            } else {
                if (!excludedTaggedScenarios.contains(sc.getDescription())) {
                    Assert.fail("expecting some excluded tags: " + sc.getDescription());
                }
            }
        }

        // check that the multiline tagged scenario works ok
        final Scenario scenario = featureFileList.get(0).getScenarios().get(3);

        Assert.assertThat("expecting a tag to be present", scenario.getTags(), hasItem("@all"));
        Assert.assertThat("expecting a tag to be present", scenario.getTags(), hasItem("@searchcontracts"));
        Assert.assertThat("expecting a tag to be present", scenario.getTags(), hasItem("@searchcontracts_30"));
    }

}
TOP

Related Classes of com.technophobia.substeps.runner.TagManagerTest

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.