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.io.Serializable; 026 027import csheets.core.Value; 028import csheets.core.formula.Literal; 029 030/** 031 * A class holding information about a Test Case Parameter. 032 * It contains the value of the parameter. 033 * @author Staffan Gustafsson 034 * @author Jens Schou 035 */ 036public class TestCaseParam extends Literal implements Serializable { 037 038 /** The unique version identifier used for serialization */ 039 private static final long serialVersionUID = -6821036933997460416L; 040 041 private TestableCell cell; 042 private int userEntered = 0; 043 private int systemGenerated = 0; 044 private int derived = 0; 045 046 /** The test case parameters origin can be either user entered, 047 * system generated within the cells assertion or derived from 048 * the values of its test cases 049 */ 050 public enum Type { 051 052 /** Entered manually by the user. */ 053 USER_ENTERED, 054 055 /** Auto-generated by the system based on the cell's assertion. */ 056 SYSTEM_GENERATED, 057 058 /** Derived from the cell's test case value. */ 059 DERIVED 060 }; 061 062 /** 063 * Creates the Test Case Parameter. 064 * @param cell the cell to which the parameter belongs 065 * @param value the value of the parameter. 066 * @param type the origin of the test case parameter 067 */ 068 public TestCaseParam(TestableCell cell, Value value, Type type) { 069 super(value); 070 this.cell = cell; 071 072 switch(type){ 073 case USER_ENTERED: 074 userEntered++; 075 break; 076 case SYSTEM_GENERATED: 077 systemGenerated++; 078 break; 079 case DERIVED: 080 derived++; 081 break; 082 } 083 } 084 085 /** 086 * Returns the Test Case Parameters cells address. 087 * @return The Test Case Parameters cells address. 088 */ 089 public TestableCell getCell(){ 090 return cell; 091 } 092 093 public boolean hasType(Type type) { 094 switch(type){ 095 case USER_ENTERED: 096 return userEntered > 0; 097 case SYSTEM_GENERATED: 098 return systemGenerated > 0; 099 case DERIVED: 100 return derived > 0; 101 default: 102 return false; 103 } 104 } 105 106 public void setType(Type type, boolean toggle) { 107 // TO DO fulhack for att hinna klart i tid 108 switch(type){ 109 case USER_ENTERED: 110 if(toggle) 111 userEntered++; 112 else 113 userEntered--; 114 break; 115 case SYSTEM_GENERATED: 116 if(toggle) 117 systemGenerated++; 118 else 119 systemGenerated--; 120 break; 121 case DERIVED: 122 if(toggle) 123 derived++; 124 else 125 derived--; 126 break; 127 } 128 } 129 130 public boolean hasNoType(){ 131 return !(userEntered > 0 || systemGenerated > 0 || derived > 0); 132 } 133 134 public boolean isUserEntered() { 135 return userEntered > 0; 136 } 137 public boolean isSystemGenerated() { 138 return systemGenerated > 0; 139 } 140 public boolean isDerived() { 141 return derived > 0; 142 } 143 144 public String toString2() { 145 String temp = toString(); 146 147 if(userEntered > 0) temp += " user entered"; 148 if(systemGenerated > 0) temp += " system generated"; 149 if(derived > 0) temp += " derived"; 150 151 return temp; 152 } 153 154 /** 155 * Returns whether the other object has the same value 156 * and type as this has. Could also check against address 157 * but that seems unecessary since TCPs are stored on 158 * the cell they belong to, and this way you can compare 159 * TCP's from different cells if you want. 160 * @param other the object to check for equality 161 * @return true if the objects are equal 162 */ 163 public boolean equals(Object other) { 164 if (!(other instanceof TestCaseParam) || other == null) 165 return false; 166 TestCaseParam otherTCP = (TestCaseParam)other; 167 return getValue().equals(otherTCP.getValue()); 168 } 169 170 /** 171 * Returns the hash code of the test case parameter. 172 * @return the hash code of the test case parameter. 173 */ 174 public int hashCode() { 175 return cell.hashCode() + getValue().hashCode(); 176 } 177}