Package org.jacoco.core.tools

Source Code of org.jacoco.core.tools.ExecFileLoaderTest

/*******************************************************************************
* Copyright (c) 2009, 2014 Mountainminds GmbH & Co. KG and Contributors
* 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:
*    Marc R. Hoffmann - initial API and implementation
*   
*******************************************************************************/
package org.jacoco.core.tools;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.jacoco.core.data.ExecutionData;
import org.jacoco.core.data.ExecutionDataReader;
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.data.ExecutionDataWriter;
import org.jacoco.core.data.SessionInfo;
import org.jacoco.core.data.SessionInfoStore;
import org.jacoco.core.tools.ExecFileLoader;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

/**
* Unit tests for {@link ExecFileLoader}.
*/
public class ExecFileLoaderTest {

  @Rule
  public final TemporaryFolder sourceFolder = new TemporaryFolder();

  private ExecFileLoader loader;

  @Before
  public void setup() {
    loader = new ExecFileLoader();
  }

  @Test
  public void testLoadFile() throws IOException {
    loader.load(createFile("a"));
    loader.load(createFile("bb"));

    assertLoaderContents("a", "bb");
  }

  @Test
  public void testLoadInputStream() throws IOException {
    final FileInputStream in1 = new FileInputStream(createFile("a"));
    loader.load(in1);
    in1.close();
    final FileInputStream in2 = new FileInputStream(createFile("bb"));
    loader.load(in2);
    in2.close();

    assertLoaderContents("a", "bb");
  }

  @Test(expected = IOException.class)
  public void testLoadBrokenContent() throws IOException {
    final File file = new File(sourceFolder.getRoot(), "broken.exec");
    final FileWriter writer = new FileWriter(file);
    writer.write("Invalid Content");
    writer.close();

    loader.load(file);
  }

  @Test
  public void testSaveFile() throws IOException {
    final File file = new File(sourceFolder.getRoot(), "target.exec");

    // Write invalid data to ensure the file is actually overwritten:
    final OutputStream out = new FileOutputStream(file);
    out.write("invalid".getBytes());
    out.close();

    loader.load(createFile("a"));
    loader.save(file, false);

    assertFileContents(file, "a");
  }

  @Test
  public void testSaveFileAppend() throws IOException {
    final File file = createFile("a");

    loader.load(createFile("bb"));
    loader.save(file, true);

    assertFileContents(file, "a", "bb");
  }

  @Test
  public void testCreateSubfolders() throws IOException {
    final File file = new File(sourceFolder.getRoot(), "a/b/c/target.exec");

    loader.load(createFile("a"));
    loader.save(file, true);

    assertFileContents(file, "a");
  }

  private File createFile(String id) throws IOException {
    final File file = new File(sourceFolder.getRoot(), id + ".exec");
    final FileOutputStream out = new FileOutputStream(file);
    final ExecutionDataWriter writer = new ExecutionDataWriter(out);
    final int value = id.length();
    writer.visitClassExecution(new ExecutionData(value, id, new boolean[0]));
    writer.visitSessionInfo(new SessionInfo(id, value, value));
    out.close();
    return file;
  }

  private void assertLoaderContents(String... expected) {
    assertContents(loader.getExecutionDataStore(),
        loader.getSessionInfoStore(), expected);
  }

  private void assertFileContents(File file, String... expected)
      throws IOException {
    final InputStream in = new FileInputStream(file);
    final ExecutionDataStore execStore = new ExecutionDataStore();
    final SessionInfoStore sessionStore = new SessionInfoStore();
    final ExecutionDataReader reader = new ExecutionDataReader(in);
    reader.setExecutionDataVisitor(execStore);
    reader.setSessionInfoVisitor(sessionStore);
    reader.read();
    assertContents(execStore, sessionStore, expected);
  }

  private void assertContents(ExecutionDataStore execStore,
      SessionInfoStore sessionStore, String... expected) {
    final List<SessionInfo> infos = sessionStore.getInfos();

    assertEquals(expected.length, execStore.getContents().size());
    assertEquals(expected.length, infos.size());
    int idx = 0;
    for (String id : expected) {
      assertEquals(id, execStore.get(id.length()).getName());
      assertEquals(id, infos.get(idx++).getId());
    }
  }

}
TOP

Related Classes of org.jacoco.core.tools.ExecFileLoaderTest

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.