001 package nl.cwi.sen1.visplugin.barchart;
002
003 import junit.framework.TestCase;
004 import nl.cwi.sen1.relationstores.Factory;
005 import nl.cwi.sen1.relationstores.types.RTuple;
006 import nl.cwi.sen1.relationstores.types.RType;
007 import nl.cwi.sen1.visplugin.VisualizationFactorySingleton;
008
009 import org.jfree.data.category.CategoryDataset;
010
011 import aterm.ATerm;
012
013 /**
014 * Test class for the PieChartVisualization Plugin.
015 * Original code : PieChart plugin ( A. Belgraver, R. van Remortel )
016 * @author Srinivasan Tharmarajah
017 * @date 12-03-2007
018 */
019 public class BarChartVisualizationTest extends TestCase {
020
021 private BCVisualizationController m_controller;
022 private BCVisualizationWindow m_window;
023 private Factory m_factory;
024 private RTuple m_relStrInt;
025 private RTuple m_relIntStr;
026 private RTuple m_relWrong;
027 private RType m_typeRelStrInt;
028 private RType m_typeRelIntStr;
029 private RType m_typeRelWrong;
030
031 /**
032 * Test setup.
033 *
034 * @author A. Belgraver
035 * @author R. van Remortel
036 * @author Srinivasan Tharmarajah
037 * @date 12-03-2007
038 */
039 protected void setUp() throws Exception {
040 super.setUp();
041
042 // Create the visualisation itself.
043 m_factory = VisualizationFactorySingleton.getFactoryInstance();
044 m_controller = new BCVisualizationController();
045 m_controller.initPluginController(VisualizationFactorySingleton.getPureFactoryInstance());
046 m_window = (BCVisualizationWindow) m_controller.createWindow();
047 m_window.setFactory(m_factory);
048
049 // Setup three Rtuples for the tests.
050 String relIntStr = "rtuple(\"StatementHistogram\", " +
051 "relation([int,str])," +
052 "set([tuple([int(nat-con(7))," +
053 "str(\"Assignment\")]), "+
054 "tuple([int(nat-con(6)), " +
055 "str(\"Assignment2\")]), " +
056 "tuple([int(nat-con(5))," +
057 "str(\"Assignment3\")]), " +
058 "tuple([int(nat-con(2))," +
059 "str(\"Assignment4\")])]))";
060 String relStrInt = "rtuple(\"TEST_BAR\"," +
061 "relation([str,int])," +
062 "set([tuple([str(\"a\")," +
063 "int(nat-con(10))])]))";
064 String relWrong = "rtuple(\"WRONG_BAR\"," +
065 "relation([int,int,str])," +
066 "set([tuple([str(\"a\")," +
067 "int(nat-con(10))])]))";
068
069 // Setup the relation type and relation themselves for the preivoulsy
070 // created RTuples.
071 m_typeRelIntStr = m_factory.RTypeFromString("relation([int,str])");
072 m_typeRelStrInt = m_factory.RTypeFromString("relation([str,int])");
073 m_typeRelWrong = m_factory.RTypeFromString("relation([int,int,str])");
074 m_relIntStr = m_factory.RTupleFromString(relIntStr);
075 m_relStrInt = m_factory.RTupleFromString(relStrInt);
076 m_relWrong = m_factory.RTupleFromString(relWrong);
077
078 }
079
080 /**
081 * Test to see whether the control returns the correct type Window.
082 *
083 * @author A. Belgraver
084 * @author R. van Remortel
085 * @author Srinivasan Tharmarajah
086 * @author Aldert Boerhoop (reviewer)
087 * @author Anton Gerdessen (reviewer)
088 * @date 12-03-2007
089 */
090 public void testBarChartVisualizationController() {
091
092 BCVisualizationController controller = new BCVisualizationController();
093 assertEquals(BCVisualizationWindow.class, controller
094 .createWindow().getClass());
095 }
096
097 /**
098 * Test to see if the TypeCheck system works.
099 *
100 * @author A. Belgraver
101 * @author R. van Remortel
102 * @author Srinivasan Tharmarajah
103 * @author Aldert Boerhoop (reviewer)
104 * @author Anton Gerdessen (reviewer)
105 * @date 07-3-2007
106 */
107 public void testTypeCheck() {
108 assertTrue(m_window.isTypeSupported(m_relStrInt));
109 assertTrue(m_window.isTypeSupported(m_relIntStr));
110 assertFalse(m_window.isTypeSupported(m_relWrong));
111 }
112
113 /**
114 * Test to see if the name for the chart is correctly found.
115 *
116 * @author A. Belgraver
117 * @author R. van Remortel
118 * @author Srinivasan Tharmarajah
119 * @author Aldert Boerhoop (reviewer)
120 * @author Anton Gerdessen (reviewer)
121 * @date 12-03-2007
122 */
123 public void testGetChartName() {
124 assertEquals("StatementHistogram", m_window.getRTupleName(m_relIntStr));
125 assertEquals("TEST_BAR", m_window.getRTupleName(m_relStrInt));
126 }
127
128 /**
129 * Test to see if RTuples are correctly converted, rel<str,int> & rel<int,str>.
130 *
131 * @author A. Belgraver
132 * @author R. van Remortel
133 * @author Srinivasan Tharmarajah
134 * @author Aldert Boerhoop (reviewer)
135 * @author Anton Gerdessen (reviewer)
136 * @date 12-03-2007
137 */
138 public void testConvertRTupleToDataset() {
139 CategoryDataset datasetIntStr = m_window.convertRTupleToDataset(m_relIntStr);
140 assertEquals(4, datasetIntStr.getRowCount());
141 assertTrue(datasetIntStr.getRowKeys().contains("Assignment4"));
142 assertEquals(new Double(7.0), datasetIntStr.getValue(0,0));
143 CategoryDataset datasetStrInt = m_window.convertRTupleToDataset(m_relStrInt);
144 assertEquals(1, datasetStrInt.getRowCount());
145 assertTrue(datasetStrInt.getRowKeys().contains("a"));
146 }
147
148 /**
149 * See if the controller correctly advertises a supported types.
150 *
151 * @author A. Belgraver
152 * @author R. van Remortel
153 * @author Srinivasan Tharmarajah
154 * @author Aldert Boerhoop (reviewer)
155 * @author Anton Gerdessen (reviewer)
156 * @date 12-03-2007
157 */
158 public void testControllerSupportedTypes() {
159 assertTrue(isRTypeInATermArray(m_controller.getSupportedTypes(),
160 m_typeRelStrInt));
161 assertTrue(isRTypeInATermArray(m_controller.getSupportedTypes(),
162 m_typeRelIntStr));
163 assertFalse(isRTypeInATermArray(m_controller.getSupportedTypes(),
164 m_typeRelWrong));
165 }
166
167
168 /**
169 * Test if a specific RType is part of an ATerm array.
170 *
171 * @author A. Belgraver
172 * @author R. van Remortel
173 * @author Aldert Boerhoop (reviewer)
174 * @author Anton Gerdessen (reviewer)
175 * @param arr
176 * Array of ATerms
177 * @param type
178 * RType to find in ATerm array
179 * @return true if it is in the array, false if it isn't
180 * @date 12-03-2007
181 */
182 private boolean isRTypeInATermArray(ATerm[] arr, RType type) {
183 for (int i = 0; i < arr.length; i++) {
184 if (arr[i].equals(type)) {
185 return true;
186 }
187 }
188 return false;
189 }
190 }