/* * Copyright 2009 Google Inc. * * 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 com.google.jstestdriver.output; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.PrintStream; import junit.framework.TestCase; import com.google.gson.Gson; import com.google.jstestdriver.BrowserInfo; import com.google.jstestdriver.JsException; import com.google.jstestdriver.TestResult; public class DefaultListenerTest extends TestCase { private static final String NEW_LINE = System.getProperty("line.separator"); private final Gson gson = new Gson(); private OutputStream buf = new ByteArrayOutputStream(); private PrintStream out = new PrintStream(buf, true); public void testEachPassedTestPrintsDotEorFFailuresOnClose() throws Exception { DefaultListener printer = new DefaultListener(out, false); BrowserInfo browser = new BrowserInfo(); browser.setName("TB"); browser.setVersion("1"); browser.setOs("os"); printer.onTestComplete(testResult(browser, "passed", "", "", "A", "d", 1)); printer.onTestComplete(testResult(browser, "failed", gson.toJson(new JsException("name", "abc", "fileName", 1L, "stack")), "", "B", "e", 2)); printer.onTestComplete(testResult(browser, "error", gson.toJson(new JsException("name", "abc", "fileName", 1L, "stack")), "", "C", "f", 3)); printer.finish(); assertEquals(".FE" + NEW_LINE + "Total 3 tests (Passed: 1; Fails: 1; Errors: 1) (6.00 ms)" + NEW_LINE + " TB 1 os: Run 3 tests (Passed: 1; Fails: 1; Errors 1) (6.00 ms)" + NEW_LINE + " B.e failed (2.00 ms): abc" + NEW_LINE + " stack" + NEW_LINE + NEW_LINE + " C.f error (3.00 ms): abc" + NEW_LINE + " stack" + NEW_LINE + NEW_LINE, buf.toString()); } public void testEachTestPrintsDotAndWrapsLongLine() throws Exception { DefaultListener printer = new DefaultListener(out, false); BrowserInfo browser = new BrowserInfo(); browser.setName("TB"); browser.setVersion("1"); browser.setOs("os"); printer.setLineLength(1); TestResult result = new TestResult(browser, "passed", "", "", "", "", 0); printer.onTestComplete(result); printer.onTestComplete(result); printer.onTestComplete(result); assertEquals("." + NEW_LINE + "." + NEW_LINE + "." + NEW_LINE, buf.toString()); } public void testNotVerbosePassAndLog() throws Exception { DefaultListener printer = new DefaultListener(out, false); BrowserInfo browser = new BrowserInfo(); browser.setName("TB"); browser.setVersion("1"); browser.setOs("os"); printer.onTestComplete(testResult(browser, "passed", "", "[LOG] some log", "A", "d", 1)); printer.finish(); assertEquals("." + NEW_LINE + "Total 1 tests (Passed: 1; Fails: 0; Errors: 0) (1.00 ms)" + NEW_LINE + " TB 1 os: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1.00 ms)" + NEW_LINE + " A.d passed (1.00 ms)" + NEW_LINE + " [LOG] some log" + NEW_LINE, buf.toString()); } public void testVerbosePassAndLog() throws Exception { DefaultListener printer = new DefaultListener(out, true); BrowserInfo browser = new BrowserInfo(); browser.setName("TB"); browser.setVersion("1"); browser.setOs("os"); printer.onTestComplete(testResult(browser, "passed", "", "[LOG] some log", "A", "d", 1)); printer.finish(); assertEquals("TB 1 os [PASSED] A.d" + NEW_LINE + " [LOG] some log" + NEW_LINE + "Total 1 tests (Passed: 1; Fails: 0; Errors: 0) (1.00 ms)" + NEW_LINE + " TB 1 os: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1.00 ms)" + NEW_LINE, buf.toString()); } public void testNotVerbosePassFailErrorAndLog() throws Exception { DefaultListener printer = new DefaultListener(out, false); BrowserInfo browser = new BrowserInfo(); browser.setName("TB"); browser.setVersion("1"); browser.setOs("os"); printer.onTestComplete(testResult(browser, "passed", "", "[LOG] some log", "A", "d", 1)); printer.onTestComplete(testResult(browser, "failed", gson.toJson(new JsException("name", "abc", "fileName", 1L, "stack")), "[LOG] failed log", "B", "e", 2)); printer.onTestComplete(testResult(browser, "error", gson.toJson(new JsException("name", "abc", "fileName", 1L, "stack")), "[LOG] error log", "C", "f", 3)); printer.finish(); assertEquals(".FE" + NEW_LINE + "Total 3 tests (Passed: 1; Fails: 1; Errors: 1) (6.00 ms)" + NEW_LINE + " TB 1 os: Run 3 tests (Passed: 1; Fails: 1; Errors 1) (6.00 ms)" + NEW_LINE + " A.d passed (1.00 ms)" + NEW_LINE + " [LOG] some log" + NEW_LINE + " B.e failed (2.00 ms): abc" + NEW_LINE + " stack" + NEW_LINE + NEW_LINE + " [LOG] failed log" + NEW_LINE + " C.f error (3.00 ms): abc" + NEW_LINE + " stack" + NEW_LINE + NEW_LINE + " [LOG] error log" + NEW_LINE, buf.toString()); } private TestResult testResult(BrowserInfo browser, String result, String message, String log, String testCaseName, String testName, float time) { final TestResult testResult = new TestResult(browser, result, message, log, testCaseName, testName, time); if (!"passed".equals(result)) { final JsException exception = gson.fromJson(message, JsException.class); testResult.setParsedMessage(exception.getMessage()); testResult.setStack(exception.getStack()); } return testResult; } public void testVerbosePassFailErrorAndLog() throws Exception { DefaultListener printer = new DefaultListener(out, true); BrowserInfo browser = new BrowserInfo(); browser.setName("TB"); browser.setVersion("1"); browser.setOs("os"); printer.onTestComplete(testResult(browser, "passed", "", "[LOG] some log", "A", "d", 1)); printer.onTestComplete(testResult(browser, "failed", gson.toJson(new JsException("name", "abc", "fileName", 1L, "stack")), "[LOG] failed log", "B", "e", 2)); printer.onTestComplete(testResult(browser, "error", gson.toJson(new JsException("name", "abc", "fileName", 1L, "stack")), "[LOG] error log", "C", "f", 3)); printer.finish(); assertEquals("TB 1 os [PASSED] A.d" + NEW_LINE + " [LOG] some log" + NEW_LINE + "TB 1 os [FAILED] B.e" + NEW_LINE + " [LOG] failed log" + NEW_LINE + "TB 1 os [ERROR] C.f" + NEW_LINE + " [LOG] error log" + NEW_LINE + "Total 3 tests (Passed: 1; Fails: 1; Errors: 1) (6.00 ms)" + NEW_LINE + " TB 1 os: Run 3 tests (Passed: 1; Fails: 1; Errors 1) (6.00 ms)" + NEW_LINE + " B.e failed (2.00 ms): abc" + NEW_LINE + " stack" + NEW_LINE + NEW_LINE + " C.f error (3.00 ms): abc" + NEW_LINE + " stack" + NEW_LINE + NEW_LINE , buf.toString()); } }