1d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann/******************************************************************************* 2d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors 3d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * All rights reserved. This program and the accompanying materials 4d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * are made available under the terms of the Eclipse Public License v1.0 5d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * which accompanies this distribution, and is available at 6d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * http://www.eclipse.org/legal/epl-v10.html 7d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * 8d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Contributors: 9d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Marc R. Hoffmann - initial API and implementation 10d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * 11d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann *******************************************************************************/ 12d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannpackage org.jacoco.cli.internal; 13d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 14d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport static org.junit.Assert.assertEquals; 15d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport static org.junit.Assert.assertTrue; 16d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 17d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport java.io.PrintWriter; 18d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport java.io.StringWriter; 19d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport java.io.UnsupportedEncodingException; 20d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport java.net.URLDecoder; 21d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 22d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport org.junit.Before; 23d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 24d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann/** 25d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Base class for command tests. 26d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 27d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannpublic abstract class CommandTestBase { 28d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 29d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected StringWriter out; 30d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected StringWriter err; 31d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected int result; 32d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 33d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Before 34d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann public void before() { 35d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann out = new StringWriter(); 36d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann err = new StringWriter(); 37d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 38d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 39d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected int execute(String... args) throws Exception { 40d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann result = new Main(args).execute(new PrintWriter(out), 41d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann new PrintWriter(err)); 42d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann return result; 43d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 44d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 45d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected void assertOk() { 46d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertEquals(err.toString(), 0, result); 47d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 48d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 49d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected void assertFailure() { 50d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertEquals(-1, result); 51d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 52d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 53d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected void assertNoOutput(StringWriter buffer) { 54d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertEquals("", buffer.toString()); 55d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 56d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 57d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected void assertContains(String expected, StringWriter buffer) { 58d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann final String content = buffer.toString(); 59d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann assertTrue(content, content.contains(expected)); 60d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 61d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 62d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected String getClassPath() { 63d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann final String name = getClass().getName(); 64d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann final String res = "/" + name.replace('.', '/') + ".class"; 65d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann String loc = getClass().getResource(res).getFile(); 66d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann try { 67d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann loc = URLDecoder.decode(loc, "UTF-8"); 68d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } catch (UnsupportedEncodingException e) { 69d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 70d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann return loc.substring(0, loc.length() - res.length()); 71d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 72d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 73d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann} 74