001/* 002 * Copyright (c) 2005 Jens Schou, Staffan Gustafsson, Bjorn Lanneskog, 003 * Einar Pehrson and Sebastian Kekkonen 004 * 005 * This file is part of 006 * CleanSheets Extension for Test Cases 007 * 008 * CleanSheets Extension for Test Cases is free software; you can 009 * redistribute it and/or modify it under the terms of the GNU General Public 010 * License as published by the Free Software Foundation; either version 2 of 011 * the License, or (at your option) any later version. 012 * 013 * CleanSheets Extension for Test Cases is distributed in the hope that 014 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied 015 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 016 * See the GNU General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with CleanSheets Extension for Test Cases; if not, write to the 020 * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 021 * Boston, MA 02111-1307 USA 022 */ 023package csheets.ext.test; 024 025import java.util.Set; 026 027import csheets.core.Spreadsheet; 028import csheets.ext.SpreadsheetExtension; 029 030/** 031 * An extension of a spreadsheet, with support for testable cells. 032 * @author Einar Pehrson 033 */ 034public class TestableSpreadsheet extends SpreadsheetExtension { 035 036 /** The unique version identifier used for serialization */ 037 private static final long serialVersionUID = -8144504629252776866L; 038 039 /** 040 * Creates a testable spreadsheet for the given spreadsheet. 041 * @param spreadsheet the spreadsheet to extend 042 */ 043 protected TestableSpreadsheet(Spreadsheet spreadsheet) { 044 super(spreadsheet, TestExtension.NAME); 045 } 046 047 /** 048 * Returns the testedness of the spreadsheet, i.e. the ratio of valid 049 * test cases to available test cases in all cells. 050 * @return a number between 0.0 and 1.0 denoting the level of testedness 051 */ 052 public double getTestedness() { 053 // Sums test cases 054 double nAvailable = 0; 055 double nValid = 0; 056 057 for (int row = 0; row < getRowCount(); row++) 058 for (int column = 0; column < getColumnCount(); column++) { 059 TestableCell cell = (TestableCell)getCell(column, row); 060 if (cell.hasTestCases()) { 061 Set<TestCase> testCases = cell.getTestCases(); 062 nAvailable += testCases.size(); 063 for (TestCase testCase : testCases) 064 if (testCase.getValidationState() == TestCase.ValidationState.VALID) 065 nValid++; 066 } 067 } 068 069 // Calculates and returns the testedness 070 if (nAvailable > 0) 071 return nValid / nAvailable; 072 else 073 return 0; 074 } 075}