Package gherkin.formatter

Source Code of gherkin.formatter.JSONFormatterTest

package gherkin.formatter;

import static gherkin.util.FixJava.readResource;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import gherkin.JSONParser;
import gherkin.deps.com.google.gson.Gson;
import gherkin.formatter.model.Comment;
import gherkin.formatter.model.DocString;
import gherkin.formatter.model.Feature;
import gherkin.formatter.model.Match;
import gherkin.formatter.model.Result;
import gherkin.formatter.model.Scenario;
import gherkin.formatter.model.Step;
import gherkin.formatter.model.Tag;

import java.io.PrintStream;
import java.io.StringReader;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.junit.Test;

public class JSONFormatterTest {
    @Test
    public void shouldNotCloseProvidedStreamInDone() {
        PrintStream out = mock(PrintStream.class);
        Formatter formatter = new JSONFormatter(out);
        formatter.done();
        verify(out, never()).close();
    }

    @Test
    public void shouldFlushAndCloseProvidedStreamInClose() {
        PrintStream out = mock(PrintStream.class);
        Formatter formatter = new JSONFormatter(out);
        formatter.close();
        verify(out).flush();
        verify(out).close();
    }

    @Test
    public void should_roundtrip_this_json() {
        // From json_parser_spec.rb
        String json = readResource("/gherkin/formatter/model/complicated.json");
        checkJson(json);
    }

    private void checkJson(String json) {
        Appendable io = new StringBuilder();
        JSONPrettyFormatter f = new JSONPrettyFormatter(io);
        JSONParser p = new JSONParser(f, f);
        p.parse(json);
        f.done();

        Gson gson = new Gson();

        List expected = gson.fromJson(new StringReader(json), List.class);
        List actual = gson.fromJson(new StringReader(io.toString()), List.class);
        assertEquals(expected, actual);
    }

    @SuppressWarnings("rawtypes")
    @Test
    public void testAllStepsFirstOrderingOfCalls() {
        StringBuilder stringBuilder = new StringBuilder();
        JSONFormatter jsonFormatter = new JSONPrettyFormatter(stringBuilder);
        Feature feature = feature("Test Feature");
        Scenario scenario = scenario("Test Scenario");
        Step step1 = step("Given", "Step 1");
        Step step2 = step("Given", "Step 2");
        final byte[] data1 = new byte[] {1, 2, 3};
        String text1 = "text1";
        String text2 = "text2";
        final byte[] data2 = new byte[] {4};
        Result step1Result = result("passed");
        Result step2Result = result("failed");

        jsonFormatter.uri(uri());
        jsonFormatter.feature(feature);
        jsonFormatter.startOfScenarioLifeCycle(scenario);
        jsonFormatter.before(match(), result("passed"));
        jsonFormatter.scenario(scenario);

        jsonFormatter.step(step1);
        jsonFormatter.step(step2);

        jsonFormatter.match(match());
        jsonFormatter.embedding("mime-type", data1);
        jsonFormatter.write(text1);
        jsonFormatter.result(step1Result);

        jsonFormatter.match(match());
        jsonFormatter.write(text2);
        jsonFormatter.embedding("mime-type-2", data2);
        jsonFormatter.result(step2Result);
        jsonFormatter.endOfScenarioLifeCycle(scenario);

        jsonFormatter.eof();
        jsonFormatter.done();
        jsonFormatter.close();

        Gson gson = new Gson();
        List result = gson.fromJson(stringBuilder.toString(), List.class);

        Map featureJson = (Map) result.get(0);
        assertEquals(feature.getName(), featureJson.get("name"));

        Map scenarioJson = (Map) ((List) featureJson.get("elements")).get(0);
        assertEquals(scenario.getName(), scenarioJson.get("name"));

        Map step1Json = (Map) ((List)scenarioJson.get("steps")).get(0);
        assertJsonStepData(step1, step1Result, step1Json);

        Map step2Json = (Map) ((List)scenarioJson.get("steps")).get(1);
        assertJsonStepData(step2, step2Result, step2Json);


    }

    @SuppressWarnings("rawtypes")
    @Test
    public void testOneStepAtTheTimeOrderingOfCalls() {
        StringBuilder stringBuilder = new StringBuilder();
        JSONFormatter jsonFormatter = new JSONPrettyFormatter(stringBuilder);
        Feature feature = feature("Test Feature");
        Scenario scenario = scenario("Test Scenario");
        Step step1 = step("Given", "Step 1");
        Step step2 = step("Given", "Step 2");
        final byte[] data1 = new byte[] {1, 2, 3};
        String text1 = "text1";
        String text2 = "text2";
        final byte[] data2 = new byte[] {4};
        Result step1Result = result("passed");
        Result step2Result = result("failed");

        jsonFormatter.uri(uri());
        jsonFormatter.feature(feature);
        jsonFormatter.startOfScenarioLifeCycle(scenario);
        jsonFormatter.before(match(), result("passed"));
        jsonFormatter.scenario(scenario);

        jsonFormatter.step(step1);
        jsonFormatter.match(match());
        jsonFormatter.embedding("mime-type", data1);
        jsonFormatter.write(text1);
        jsonFormatter.result(step1Result);

        jsonFormatter.step(step2);
        jsonFormatter.match(match());
        jsonFormatter.write(text2);
        jsonFormatter.embedding("mime-type-2", data2);
        jsonFormatter.result(step2Result);
        jsonFormatter.endOfScenarioLifeCycle(scenario);

        jsonFormatter.eof();
        jsonFormatter.done();
        jsonFormatter.close();

        Gson gson = new Gson();
        List result = gson.fromJson(stringBuilder.toString(), List.class);

        Map featureJson = (Map) result.get(0);
        assertEquals(feature.getName(), featureJson.get("name"));

        Map scenarioJson = (Map) ((List) featureJson.get("elements")).get(0);
        assertEquals(scenario.getName(), scenarioJson.get("name"));

        Map step1Json = (Map) ((List)scenarioJson.get("steps")).get(0);
        assertJsonStepData(step1, step1Result, step1Json);

        Map step2Json = (Map) ((List)scenarioJson.get("steps")).get(1);
        assertJsonStepData(step2, step2Result, step2Json);


    }

    @SuppressWarnings("rawtypes")
    @Test
    public void testBeforeHooks() {
        StringBuilder stringBuilder = new StringBuilder();
        JSONFormatter jsonFormatter = new JSONPrettyFormatter(stringBuilder);
        Feature feature = feature("Test Feature");
        Scenario scenario1 = scenario("Test Scenario 1");
        Scenario scenario2 = scenario("Test Scenario 2");

        jsonFormatter.uri(uri());
        jsonFormatter.feature(feature);

        jsonFormatter.startOfScenarioLifeCycle(scenario1);
        jsonFormatter.before(match(), result("passed"));
        jsonFormatter.scenario(scenario1);
        jsonFormatter.endOfScenarioLifeCycle(scenario1);

        jsonFormatter.startOfScenarioLifeCycle(scenario2);
        jsonFormatter.before(match(), result("passed"));
        jsonFormatter.scenario(scenario2);
        jsonFormatter.endOfScenarioLifeCycle(scenario2);

        jsonFormatter.eof();
        jsonFormatter.done();
        jsonFormatter.close();

        Gson gson = new Gson();
        List result = gson.fromJson(stringBuilder.toString(), List.class);

        Map featureJson = (Map) result.get(0);
        assertEquals(feature.getName(), featureJson.get("name"));

        Map scenarioJson = (Map) ((List) featureJson.get("elements")).get(0);
        assertEquals(scenario1.getName(), scenarioJson.get("name"));

        List beforeHooks = (List) scenarioJson.get("before");
        assertEquals(1, beforeHooks.size());

        scenarioJson = (Map) ((List) featureJson.get("elements")).get(1);
        assertEquals(scenario2.getName(), scenarioJson.get("name"));

        beforeHooks = (List) scenarioJson.get("before");
        assertEquals(1, beforeHooks.size());
    }

  private void assertJsonStepData(Step step, Result stepResult, Map stepJson) {
    assertEquals(step.getName(), stepJson.get("name"));
        List embeddings1 = (List)stepJson.get("embeddings");
        assertNotNull("embeddings", embeddings1);
        assertEquals("embeddings size", embeddings1.size(), 1);
        List output1 = (List)stepJson.get("output");
        assertNotNull("output", output1);
        assertEquals("output size", output1.size(), 1);
        Map step1ResultJson = (Map) stepJson.get("result");
        assertEquals(stepResult.getStatus(), step1ResultJson.get("status"));
  }

    private String uri() {
        return "uri";
    }

    private Feature feature(String featureName) {
        return new Feature(Collections.<Comment>emptyList(), Collections.<Tag>emptyList(), "", featureName, "", 12, "");
    }

    private Scenario scenario(String scenarioName) {
      return new Scenario(Collections.<Comment>emptyList(), Collections.<Tag>emptyList(), "", scenarioName, "", 13, "");
    }

    private Step step(String keyword, String stepName) {
        return new Step(Collections.<Comment>emptyList(), keyword, stepName, 14, null, new DocString("", "", 52));
    }

    private Match match() {
        return new Match(null, null);
    }

    private Result result(String status) {
        return new Result(status, 565L, "");
    }

}
TOP

Related Classes of gherkin.formatter.JSONFormatterTest

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.