/******************************************************************************* * Copyright (c) 2012 VMWare, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VMWare, Inc. - initial API and implementation *******************************************************************************/ package org.grails.ide.eclipse.ui.test; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.core.model.IStreamMonitor; import org.eclipse.debug.core.model.IStreamsProxy; import org.eclipse.debug.ui.console.IConsole; import org.eclipse.debug.ui.console.IConsoleHyperlink; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.console.IOConsoleOutputStream; import org.eclipse.ui.console.IPatternMatchListener; import org.grails.ide.eclipse.ui.internal.launch.GrailsConsoleLineTracker; import org.grails.ide.eclipse.ui.internal.launch.GrailsConsoleLineTracker.GrailsHyperLink; /** * Tests that the {@link GrailsConsoleLineTracker} properly creates * links * @author Andrew Eisenberg * @created Aug 24, 2010 */ @SuppressWarnings("deprecation") public class GrailsConsoleLineTrackerTests extends TestCase { private static final String RUNNING_MARKER = "Server running. Browse to "; private static final String TEST_PASSED_MARKER = "Tests PASSED - view reports in "; private static final String TEST_FAILED_MARKER = "Tests FAILED - view reports in "; // Typical line: (grails 1.1.1) // "Cobertura Code Coverage Complete (view reports in: N:\workspaces\grails_play\gTunes\test\reports/cobertura)" // Typical line: (grails 1.2m3) // "Cobertura Code Coverage Complete (view reports in: target\test-reports/cobertura)" private static final String CODE_COVERAGE_MARKER = "Cobertura Code Coverage Complete (view reports in: "; private static final String MOCK_BASE_DIR = "/tests"; MockLineTracker lineTracker; MockConsole console; @Override protected void setUp() throws Exception { super.setUp(); lineTracker = new MockLineTracker(); console = new MockConsole(); lineTracker.init(console); } public void testRunApp1() throws Exception { lineTracker.createRunAppHyperlink("ffkjafsdkj " + RUNNING_MARKER + "http://foobar", 0); console.assertLinks("http://foobar"); } public void testRunApp2() throws Exception { lineTracker.createRunAppHyperlink("ffkjafsdkj " + RUNNING_MARKER + "http://foobar or https://foobar", 0); console.assertLinks("http://foobar", "https://foobar"); } public void testTestPassed1() throws Exception { lineTracker.createResultsHyperlink(TEST_PASSED_MARKER, TEST_PASSED_MARKER + "/bee/bop/woo/bop", 0, MOCK_BASE_DIR); console.assertLinks("file:/bee/bop/woo/bop/html/index.html"); } public void testTestPassed2() throws Exception { lineTracker.createResultsHyperlink(TEST_PASSED_MARKER, TEST_PASSED_MARKER + "bee/bop/woo/bop", 0, MOCK_BASE_DIR); console.assertLinks("file:/tests/bee/bop/woo/bop/html/index.html"); } public void testTestFailed1() throws Exception { lineTracker.createResultsHyperlink(TEST_FAILED_MARKER, TEST_FAILED_MARKER + "/bee/bop/woo/bop", 0, MOCK_BASE_DIR); console.assertLinks("file:/bee/bop/woo/bop/html/index.html"); } public void testTestFailed2() throws Exception { lineTracker.createResultsHyperlink(TEST_FAILED_MARKER, TEST_FAILED_MARKER + "bee/bop/woo/bop", 0, MOCK_BASE_DIR); console.assertLinks("file:/tests/bee/bop/woo/bop/html/index.html"); } public void testTestCoverage1() throws Exception { lineTracker.createResultsHyperlink(CODE_COVERAGE_MARKER, CODE_COVERAGE_MARKER + "/bee/bop/woo/bop", 0, MOCK_BASE_DIR); console.assertLinks("file:/bee/bop/woo/bop/index.html"); } public void testTestCoverage2() throws Exception { lineTracker.createResultsHyperlink(CODE_COVERAGE_MARKER, CODE_COVERAGE_MARKER + "bee/bop/woo/bop", 0, MOCK_BASE_DIR); console.assertLinks("file:/tests/bee/bop/woo/bop/index.html"); } private class MockLineTracker extends GrailsConsoleLineTracker { /* * make accessible */ @Override protected void createResultsHyperlink(String marker, String text, int offset, String baseDir) { super.createResultsHyperlink(marker, text, offset, baseDir); } /* * make accessible */ @Override protected void createRunAppHyperlink(String lineStr, int lineOffset) { super.createRunAppHyperlink(lineStr, lineOffset); } } private class MockConsole implements IConsole { List<String> links = new ArrayList<String>(); public void connect(IStreamsProxy streamsProxy) { //nop } public void connect(IStreamMonitor streamMonitor, String streamIdentifer) { //nop } public void addLink(IConsoleHyperlink link, int offset, int length) { //nop } public void addLink(IHyperlink link, int offset, int length) { if (link instanceof GrailsHyperLink) { links.add(((GrailsHyperLink) link).getUrl()); } else { fail("Invalid hyperlink created: " + link); } } public IRegion getRegion(IConsoleHyperlink link) { //nop return null; } public IRegion getRegion(IHyperlink link) { // nop return null; } public IDocument getDocument() { //nop return null; } public IProcess getProcess() { //nop return null; } public void addPatternMatchListener(IPatternMatchListener matchListener) { //nop } public void removePatternMatchListener( IPatternMatchListener matchListener) { //nop } public IOConsoleOutputStream getStream(String streamIdentifier) { //nop return null; } void assertLinks(String...urls) { assertEquals("Wrong number of URLs found", urls.length, links.size()); for (int i = 0; i < urls.length; i++) { assertEquals("Wrong URL found", urls[i], links.get(i)); } } } }