1497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann/*******************************************************************************
2f9c5b2a802d905e7c47b1ba0d3a0ef88cd569208Marc R. Hoffmann * Copyright (c) 2009, 2015 Mountainminds GmbH & Co. KG and Contributors
3497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann * All rights reserved. This program and the accompanying materials
4497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann * are made available under the terms of the Eclipse Public License v1.0
5497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann * which accompanies this distribution, and is available at
6497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann * http://www.eclipse.org/legal/epl-v10.html
7497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann *
8497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann * Contributors:
9497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann *    Marc R. Hoffmann - initial API and implementation
10497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann *
11497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann *******************************************************************************/
12497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannpackage org.jacoco.examples;
13497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
14497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannimport static org.jacoco.examples.ConsoleOutput.containsLine;
15497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
16497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannimport java.io.File;
17497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannimport java.io.FileOutputStream;
18497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannimport java.io.IOException;
19497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannimport java.io.InputStream;
20497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
21497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannimport org.junit.Rule;
22497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannimport org.junit.Test;
23497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
24497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann/**
25497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann * Tests for {@link ClassInfo}.
26497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann */
27497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmannpublic class ClassInfoTest {
28497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
29497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann	@Rule
30497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann	public ConsoleOutput console = new ConsoleOutput();
31497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
32497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann	@Test
33497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann	public void testRunExample() throws Exception {
34497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
35497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		final String[] args = new String[] { createClassFile() };
36497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		new ClassInfo(console.stream).execute(args);
37497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
38497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		console.expect(containsLine("class name:   org/jacoco/examples/ClassInfoTest"));
39497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		console.expect(containsLine("methods:      3"));
40497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		console.expect(containsLine("branches:     2"));
41497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		console.expect(containsLine("complexity:   4"));
42497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann	}
43497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann
44497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann	private String createClassFile() throws IOException {
45497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		InputStream in = getClass().getResource(
46497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann				getClass().getSimpleName() + ".class").openStream();
47497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		File f = File.createTempFile("Example", ".class");
48497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		FileOutputStream out = new FileOutputStream(f);
49497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		int b;
50497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		while ((b = in.read()) != -1) {
51497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann			out.write(b);
52497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		}
53497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		in.close();
54497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		out.close();
55497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann		return f.getPath();
56497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann	}
57497fb3fd0f85b5dd4b7d240f99dc0bc3811d939cMarc R. Hoffmann}
58