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