/*
 * Cobertura - http://cobertura.sourceforge.net/
 *
 * Copyright (C) 2005 Mark Doliner
 *
 * Cobertura is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published
 * by the Free Software Foundation; either version 2 of the License,
 * or (at your option) any later version.
 *
 * Cobertura is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Cobertura; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA
 */

package net.sourceforge.cobertura.coveragedata;

import java.io.File;

import junit.framework.TestCase;

public class CoverageDataFileHandlerTest extends TestCase
{

	private final static String basedir = (System.getProperty("basedir") != null)
			? System.getProperty("basedir")
			: ".";
	private final static String pathToTestOutput = basedir
			+ "/build/test/CoverageDataFileHandlerTest";

	private final ProjectData a = new ProjectData();
	private File tmpDir = new File(pathToTestOutput);

	public void setUp()
	{
		// Create some coverage data
		ClassData classData;
		assertEquals(0, a.getNumberOfClasses());
		assertEquals(0, a.getNumberOfChildren());

		classData = new ClassData("HelloWorld");
		classData.setSourceFileName("com/example/HelloWorld.java");
		for (int i = 0; i < 10; i++)
			classData.addLine(i, "test", "(I)B");
		a.addClassData(classData);
		assertEquals(1, a.getNumberOfClasses());
		assertEquals(1, a.getNumberOfChildren());

		classData = new ClassData("HelloWorldHelper");
		classData.setSourceFileName("com/example/HelloWorldHelper.java");
		for (int i = 0; i < 14; i++)
			classData.addLine(i, "test", "(I)B");
		a.addClassData(classData);
		assertEquals(2, a.getNumberOfClasses());
		assertEquals(1, a.getNumberOfChildren());

		// Create the directory for our serialized coverage data
		tmpDir.mkdirs();
	}

	public void tearDown()
	{
		tmpDir = new File(pathToTestOutput);
		File files[] = tmpDir.listFiles();
		for (int i = 0; i < files.length; i++)
			files[i].delete();
		tmpDir.delete();
	}

	public void testSaveAndRestore()
	{
		File dataFile = new File(tmpDir, CoverageDataFileHandler.FILE_NAME);
		CoverageDataFileHandler.saveCoverageData(a, dataFile);

		ProjectData b;
		b = CoverageDataFileHandler.loadCoverageData(dataFile);
		assertEquals(a, b);
	}

}
