001 package org.hackystat.telemetry.analyzer.language.parser; 002 003 import java.util.List; 004 005 import junit.framework.TestCase; 006 007 import org.hackystat.telemetry.analyzer.language.ast.ChartReference; 008 import org.hackystat.telemetry.analyzer.language.ast.DrawCommand; 009 import org.hackystat.telemetry.analyzer.language.ast.FunctionCall; 010 import org.hackystat.telemetry.analyzer.language.ast.NumberConstant; 011 import org.hackystat.telemetry.analyzer.language.ast.ReducerCall; 012 import org.hackystat.telemetry.analyzer.language.ast.StreamsReference; 013 import org.hackystat.telemetry.analyzer.language.ast.StringConstant; 014 import org.hackystat.telemetry.analyzer.language.ast.TelemetryChartDefinition; 015 import org.hackystat.telemetry.analyzer.language.ast.TelemetryChartYAxisDefinition; 016 import org.hackystat.telemetry.analyzer.language.ast.TelemetryDefinition; 017 import org.hackystat.telemetry.analyzer.language.ast.TelemetryReportDefinition; 018 import org.hackystat.telemetry.analyzer.language.ast.TelemetryStreamsDefinition; 019 import org.hackystat.telemetry.analyzer.language.ast.Variable; 020 import org.hackystat.telemetry.analyzer.language.ast.YAxisReference; 021 022 /** 023 * Test suite for <code>TelemetryQueryParser</code>. 024 * 025 * @author (Cedric) Qin ZHANG 026 */ 027 public class TestTelemetryLanguageParser extends TestCase { 028 029 /** 030 * Tests <code>parseStreamsDef</code> method. 031 * 032 * @throws Exception If test fails. 033 */ 034 public void testParseSteamsDef1() throws Exception { 035 String strDef 036 = "streams myStreamsDef-A() = {\"This is description, oh yeah.\", MyReducer()};"; 037 TelemetryStreamsDefinition def = TelemetryLanguageParser.parseStreamsDef(strDef); 038 assertEquals("myStreamsDef-A", def.getName()); 039 assertEquals("This is description, oh yeah.", def.getDescription()); 040 assertEquals(0, def.getVariables().length); 041 ReducerCall reducerCall = (ReducerCall) def.getExpression(); 042 assertEquals("MyReducer", reducerCall.getReducerName()); 043 assertEquals(0, reducerCall.getParameters().length); 044 045 // another one 046 strDef = "streams A ( ) = {\"description\", ActiveTime( \"**\") };"; 047 def = TelemetryLanguageParser.parseStreamsDef(strDef); 048 assertEquals("A", def.getName()); 049 assertEquals("description", def.getDescription()); 050 assertEquals(0, def.getVariables().length); 051 reducerCall = (ReducerCall) def.getExpression(); 052 assertEquals("ActiveTime", reducerCall.getReducerName()); 053 assertEquals(1, reducerCall.getParameters().length); 054 StringConstant param = (StringConstant) reducerCall.getParameters()[0]; 055 assertEquals("**", param.getValue()); 056 } 057 058 /** 059 * Tests <code>parseStreamsDef</code> method. 060 * 061 * @throws Exception If test fails. 062 */ 063 public void testParseSteamsDef2() throws Exception { 064 String strDef = "streams myStreamsDef-A ( t1) = { \"description\" , MyReducer()};"; 065 TelemetryStreamsDefinition def = TelemetryLanguageParser.parseStreamsDef(strDef); 066 assertEquals("myStreamsDef-A", def.getName()); 067 assertEquals("description", def.getDescription()); 068 069 Variable[] vars = def.getVariables(); 070 assertEquals(1, vars.length); 071 assertEquals("t1", vars[0].getName()); 072 073 ReducerCall reducerCall = (ReducerCall) def.getExpression(); 074 assertEquals("MyReducer", reducerCall.getReducerName()); 075 assertEquals(0, reducerCall.getParameters().length); 076 } 077 078 /** 079 * Tests <code>parseStreamsDef</code> method. 080 * 081 * @throws Exception If test fails. 082 */ 083 public void testParseSteamsDef3() throws Exception { 084 String strDef = "streams myStreamsDef_A() = {\"description\", 1+2*((0-3-4)/5)-6};"; 085 TelemetryStreamsDefinition def = TelemetryLanguageParser.parseStreamsDef(strDef); 086 assertEquals("myStreamsDef_A", def.getName()); 087 assertEquals("description", def.getDescription()); 088 assertEquals(0, def.getVariables().length); 089 090 FunctionCall root = (FunctionCall) def.getExpression(); 091 assertEquals("Sub", root.getFunctionName()); 092 assertEquals(2, root.getParameters().length); 093 094 FunctionCall left = (FunctionCall) root.getParameters()[0]; 095 assertEquals("Add", left.getFunctionName()); 096 assertEquals(2, left.getParameters().length); 097 098 NumberConstant right = (NumberConstant) root.getParameters()[1]; 099 assertEquals(new Integer(6), right.getValue()); 100 } 101 102 /** 103 * Tests <code>parseStreamsDef</code> method. 104 * 105 * @throws Exception If test fails. 106 */ 107 public void testParseSteamsDef4() throws Exception { 108 String strDef = "streams myStreamsDef()= {\"Desc Field\", " 109 + "Reducer1(\"A_a-b@b.com\", \"b\", \"**/*.java\"," 110 + "\"Ccc,DDD, eee \")/(Reducer1(\"C:\\test\\*.java\", \"true\")+Reducer2())};"; 111 // no space allowed between C and cc, e.g. "C cc" 112 TelemetryStreamsDefinition def = TelemetryLanguageParser.parseStreamsDef(strDef); 113 assertEquals("myStreamsDef", def.getName()); 114 assertEquals("Desc Field", def.getDescription()); 115 116 //Expression = Reducer1 / (Reducer1 + Reducer2) 117 FunctionCall root = (FunctionCall) def.getExpression(); 118 assertEquals("Div", root.getFunctionName()); 119 assertEquals(2, root.getParameters().length); 120 121 //left = Reducer1 122 ReducerCall left = (ReducerCall) root.getParameters()[0]; 123 assertEquals("Reducer1", left.getReducerName()); 124 assertEquals(4, left.getParameters().length); 125 assertEquals("A_a-b@b.com", ((StringConstant) left.getParameters()[0]).getValue()); 126 assertEquals("b", ((StringConstant) left.getParameters()[1]).getValue()); 127 assertEquals("**/*.java", ((StringConstant) left.getParameters()[2]).getValue()); 128 assertEquals("Ccc,DDD, eee ", ((StringConstant) left.getParameters()[3]).getValue()); 129 130 //right = Reducer1 + Reducer2 131 FunctionCall right = (FunctionCall) root.getParameters()[1]; 132 assertEquals("Add", right.getFunctionName()); 133 assertEquals(2, right.getParameters().length); 134 135 ReducerCall right1 = (ReducerCall) right.getParameters()[0]; 136 assertEquals("Reducer1", right1.getReducerName()); 137 assertEquals(2, right1.getParameters().length); 138 assertEquals("C:\\test\\*.java", ((StringConstant) right1.getParameters()[0]).getValue()); 139 assertEquals("true", ((StringConstant) right1.getParameters()[1]).getValue()); 140 141 ReducerCall right2 = (ReducerCall) right.getParameters()[1]; 142 assertEquals("Reducer2", right2.getReducerName()); 143 assertEquals(0, right2.getParameters().length); 144 } 145 146 /** 147 * Tests <code>parseStreamsDef</code> method. 148 * 149 * @throws Exception If test fails. 150 */ 151 public void testParseSteamsDef5() throws Exception { 152 String strdef = "stream CoverageStream()" // should use "streams" instead of 153 // "stream" 154 + "= {\"Test Coverage\", \"unit\", JavaCoverage(\"NumOfCoveredMethods\")" 155 + "/ (JavaCoverage(\"NumOfCoveredMethods\")+JavaCoverage(\"NumOfUncoveredMethods\"))};"; 156 try { 157 TelemetryLanguageParser.parseStreamsDef(strdef); 158 fail("Error in telemetry language not caught."); 159 } 160 catch (ParsingException ex) { 161 // expected. 162 } 163 } 164 165 /** 166 * Tests <code>parseStreamsDef</code> method. 167 * 168 * @throws Exception If test fails. 169 */ 170 public void testParseSteamsDef6() throws Exception { 171 String strDef = "streams myStreamsDef-A() = {\"description\", MyFunc(MyReducer())};"; 172 TelemetryStreamsDefinition def = TelemetryLanguageParser.parseStreamsDef(strDef); 173 assertEquals("myStreamsDef-A", def.getName()); 174 assertEquals("description", def.getDescription()); 175 assertEquals(0, def.getVariables().length); 176 177 FunctionCall functionCall = (FunctionCall) def.getExpression(); 178 assertEquals("MyFunc", functionCall.getFunctionName()); 179 assertEquals(1, functionCall.getParameters().length); 180 181 ReducerCall reducerCall = (ReducerCall) functionCall.getParameters()[0]; 182 assertEquals("MyReducer", reducerCall.getReducerName()); 183 assertEquals(0, reducerCall.getParameters().length); 184 185 // another one 186 strDef = "streams A ( ) = {\"description\", Func( ActiveTime( \"**\")) };"; 187 def = TelemetryLanguageParser.parseStreamsDef(strDef);// no exception is good enough. 188 } 189 190 /** 191 * Tests <code>parseChartDef</code> method. 192 * 193 * @throws Exception If test fails. 194 */ 195 public void testParseChartDef1() throws Exception { 196 String strDef 197 = "chart myChartsDef ()= {\"Title\", (Aa ( ), yAxisA()), (Bb ( ),yAxisB(var)) ," + 198 " (Cc(),yAxisC(var, \"const\", 1, -1.1))};"; 199 TelemetryChartDefinition def = TelemetryLanguageParser.parseChartDef(strDef); 200 assertEquals("myChartsDef", def.getName()); 201 assertEquals("Title", def.getTitle()); 202 assertEquals("Title", def.getDocString()); 203 assertEquals(0, def.getVariables().length); 204 assertEquals(3, def.getSubCharts().size()); 205 206 TelemetryChartDefinition.SubChartDefinition subChart0 = def.getSubCharts().get(0); 207 StreamsReference streamsRef0 = subChart0.getStreamsReference(); 208 assertEquals("Aa", streamsRef0.getName()); 209 assertEquals(0, streamsRef0.getParameters().length); 210 YAxisReference yAxisRef0 = subChart0.getYAxisReference(); 211 assertEquals("yAxisA", yAxisRef0.getName()); 212 assertEquals(0, yAxisRef0.getParameters().length); 213 214 TelemetryChartDefinition.SubChartDefinition subChart1 = def.getSubCharts().get(1); 215 StreamsReference streamsRef1 = subChart1.getStreamsReference(); 216 assertEquals("Bb", streamsRef1.getName()); 217 assertEquals(0, streamsRef1.getParameters().length); 218 YAxisReference yAxisRef1 = subChart1.getYAxisReference(); 219 assertEquals("yAxisB", yAxisRef1.getName()); 220 assertEquals(1, yAxisRef1.getParameters().length); 221 assertEquals("var", ((Variable) yAxisRef1.getParameters()[0]).getName()); 222 223 TelemetryChartDefinition.SubChartDefinition subChart2 = def.getSubCharts().get(2); 224 StreamsReference streamsRef2 = subChart2.getStreamsReference(); 225 assertEquals("Cc", streamsRef2.getName()); 226 assertEquals(0, streamsRef2.getParameters().length); 227 YAxisReference yAxisRef2 = subChart2.getYAxisReference(); 228 assertEquals("yAxisC", yAxisRef2.getName()); 229 assertEquals(4, yAxisRef2.getParameters().length); 230 assertEquals("var", ((Variable) yAxisRef2.getParameters()[0]).getName()); 231 assertEquals("const", ((StringConstant) yAxisRef2.getParameters()[1]).getValue()); 232 assertEquals(new Integer(1), ((NumberConstant) yAxisRef2.getParameters()[2]).getValue()); 233 assertEquals(new Double(-1.1), ((NumberConstant) yAxisRef2.getParameters()[3]).getValue()); 234 } 235 236 /** 237 * Tests <code>parseChartDef</code> method. 238 * 239 * @throws Exception If test fails. 240 */ 241 public void testParseChartDef2() throws Exception { 242 String strDef = "chart myChartsDef( t1,t2 ) = {\"Title. (1)Additional, Doc.\", " 243 + " (Aa(t1, \"r2\"), yAxisA()), (Bb(),yAxisB()),(Cc(),yAxisC()) };"; 244 TelemetryChartDefinition def = TelemetryLanguageParser.parseChartDef(strDef); 245 assertEquals("myChartsDef", def.getName()); 246 assertEquals("Title", def.getTitle()); 247 assertEquals("Title. (1)Additional, Doc.", def.getDocString()); 248 assertEquals(3, def.getSubCharts().size()); 249 250 // check template 251 Variable[] vars = def.getVariables(); 252 assertEquals(2, vars.length); 253 assertEquals("t1", vars[0].getName()); 254 assertEquals("t2", vars[1].getName()); 255 256 // check subcharts 257 TelemetryChartDefinition.SubChartDefinition subChart0 = def.getSubCharts().get(0); 258 StreamsReference streamsRef0 = subChart0.getStreamsReference(); 259 assertEquals("Aa", streamsRef0.getName()); 260 assertEquals(2, streamsRef0.getParameters().length); 261 assertEquals("t1", ((Variable) streamsRef0.getParameters()[0]).getName()); 262 assertEquals("r2", ((StringConstant) streamsRef0.getParameters()[1]).getValue()); 263 YAxisReference yAxisRef0 = subChart0.getYAxisReference(); 264 assertEquals("yAxisA", yAxisRef0.getName()); 265 266 TelemetryChartDefinition.SubChartDefinition subChart1 = def.getSubCharts().get(1); 267 StreamsReference streamsRef1 = subChart1.getStreamsReference(); 268 assertEquals("Bb", streamsRef1.getName()); 269 assertEquals(0, streamsRef1.getParameters().length); 270 YAxisReference yAxisRef1 = subChart1.getYAxisReference(); 271 assertEquals("yAxisB", yAxisRef1.getName()); 272 assertEquals(0, yAxisRef1.getParameters().length); 273 274 TelemetryChartDefinition.SubChartDefinition subChart2 = def.getSubCharts().get(2); 275 StreamsReference streamsRef2 = subChart2.getStreamsReference(); 276 assertEquals("Cc", streamsRef2.getName()); 277 assertEquals(0, streamsRef2.getParameters().length); 278 YAxisReference yAxisRef2 = subChart2.getYAxisReference(); 279 assertEquals("yAxisC", yAxisRef2.getName()); 280 assertEquals(0, yAxisRef2.getParameters().length); 281 } 282 283 /** 284 * Tests <code>parseChartDef</code> method. 285 * 286 * @throws Exception If test fails. 287 */ 288 public void testParseChartsDef3() throws Exception { 289 String strDef = "chart JavaTestLoc() = {\"\", (Sloc( \"**\" ),yAxis())};"; 290 TelemetryChartDefinition def = TelemetryLanguageParser.parseChartDef(strDef); 291 assertEquals("JavaTestLoc", def.getName()); 292 assertEquals("", def.getTitle()); 293 assertEquals("", def.getDocString()); 294 assertEquals(0, def.getVariables().length); 295 assertEquals(1, def.getSubCharts().size()); 296 297 TelemetryChartDefinition.SubChartDefinition subChart0 = def.getSubCharts().get(0); 298 StreamsReference streamsRef0 = subChart0.getStreamsReference(); 299 assertEquals("Sloc", streamsRef0.getName()); 300 assertEquals(1, streamsRef0.getParameters().length); 301 assertEquals("**", ((StringConstant) streamsRef0.getParameters()[0]).getValue()); 302 YAxisReference yAxisRef0 = subChart0.getYAxisReference(); 303 assertEquals("yAxis", yAxisRef0.getName()); 304 } 305 306 /** 307 * Tests <code>parseReportDef</code> method. 308 * 309 * @throws Exception If test fails. 310 */ 311 public void testParseReportDef1() throws Exception { 312 String strDef = "report myReportDef () = {\"A Description, testing report.\", Aa() , Bb ( )};"; 313 TelemetryReportDefinition def = TelemetryLanguageParser.parseReportDef(strDef); 314 assertEquals("myReportDef", def.getName()); 315 assertEquals("A Description, testing report", def.getTitle()); 316 assertEquals("A Description, testing report.", def.getDocString()); 317 318 List<ChartReference> nameRefs = def.getChartReferences(); 319 assertEquals(2, nameRefs.size()); 320 321 ChartReference ref0 = nameRefs.get(0); 322 assertEquals("Aa", ref0.getName()); 323 assertEquals(0, ref0.getParameters().length); 324 325 ChartReference ref1 = nameRefs.get(1); 326 assertEquals("Bb", ref1.getName()); 327 assertEquals(0, ref1.getParameters().length); 328 } 329 330 /** 331 * Tests <code>parseReportDef</code> method. 332 * 333 * @throws Exception If test fails. 334 */ 335 public void testParseReportDef2() throws Exception { 336 String strDef = "report myReportDef (t1,t2 )= {\".\", " + " Aa(t1, \"r2\"), Bb(),Cc() };"; 337 TelemetryReportDefinition def = TelemetryLanguageParser.parseReportDef(strDef); 338 assertEquals("myReportDef", def.getName()); 339 assertEquals("", def.getTitle()); 340 assertEquals(".", def.getDocString()); 341 342 // check template 343 Variable[] vars = def.getVariables(); 344 assertEquals(2, vars.length); 345 assertEquals("t1", vars[0].getName()); 346 assertEquals("t2", vars[1].getName()); 347 348 // check subcharts 349 List<ChartReference> nameRefs = def.getChartReferences(); 350 assertEquals(3, nameRefs.size()); 351 352 ChartReference ref0 = nameRefs.get(0); 353 assertEquals("Aa", ref0.getName()); 354 assertEquals(2, ref0.getParameters().length); 355 assertEquals("t1", ((Variable) ref0.getParameters()[0]).getName()); 356 assertEquals("r2", ((StringConstant) ref0.getParameters()[1]).getValue()); 357 358 ChartReference ref1 = nameRefs.get(1); 359 assertEquals("Bb", ref1.getName()); 360 assertEquals(0, ref1.getParameters().length); 361 362 ChartReference ref2 = nameRefs.get(2); 363 assertEquals("Cc", ref2.getName()); 364 assertEquals(0, ref2.getParameters().length); 365 } 366 367 /** 368 * Tests parsing of telemetry chart y-axis defintions. 369 * 370 * @throws Exception If test fails. 371 */ 372 public void testParsingChartYAxisDefinition() throws Exception { 373 String input = "y-axis my() = {\"label\"};"; 374 TelemetryChartYAxisDefinition yAxis = TelemetryLanguageParser.parseChartYAxisDef(input); 375 assertEquals("my", yAxis.getName()); 376 assertEquals(0, yAxis.getVariables().length); 377 assertEquals("label", ((StringConstant) yAxis.getLabelParameter()).getValue()); 378 assertEquals(TelemetryChartYAxisDefinition.NUMBER_TYPE_AUTO, yAxis.getNumberType()); 379 assertEquals(true, yAxis.isAutoScale()); 380 assertEquals(null, yAxis.getLowerBound()); 381 assertEquals(null, yAxis.getUpperBound()); 382 383 input = "y-axis my(var) = {var, \"integer\"};"; 384 yAxis = TelemetryLanguageParser.parseChartYAxisDef(input); 385 assertEquals("my", yAxis.getName()); 386 assertEquals(1, yAxis.getVariables().length); 387 assertEquals("var", yAxis.getVariables()[0].getName()); 388 assertEquals("var", ((Variable) yAxis.getLabelParameter()).getName()); 389 assertEquals(TelemetryChartYAxisDefinition.NUMBER_TYPE_INTEGER, yAxis.getNumberType()); 390 assertEquals(true, yAxis.isAutoScale()); 391 assertEquals(null, yAxis.getLowerBound()); 392 assertEquals(null, yAxis.getUpperBound()); 393 394 input = "y-axis my() = {\"label\", \"double\", 0, 100};"; 395 yAxis = TelemetryLanguageParser.parseChartYAxisDef(input); 396 assertEquals("my", yAxis.getName()); 397 assertEquals(0, yAxis.getVariables().length); 398 assertEquals("label", ((StringConstant) yAxis.getLabelParameter()).getValue()); 399 assertEquals(TelemetryChartYAxisDefinition.NUMBER_TYPE_DOUBLE, yAxis.getNumberType()); 400 assertEquals(false, yAxis.isAutoScale()); 401 assertTrue(yAxis.getLowerBound() instanceof Integer); 402 assertTrue(yAxis.getUpperBound() instanceof Integer); 403 assertEquals(new Integer(0), yAxis.getLowerBound()); 404 assertEquals(new Integer(100), yAxis.getUpperBound()); 405 406 input = "y-axis my() = {\"label\", \"double\", -0.10, 1.10};"; 407 yAxis = TelemetryLanguageParser.parseChartYAxisDef(input); 408 assertEquals("my", yAxis.getName()); 409 assertEquals(0, yAxis.getVariables().length); 410 assertEquals("label", ((StringConstant) yAxis.getLabelParameter()).getValue()); 411 assertEquals(TelemetryChartYAxisDefinition.NUMBER_TYPE_DOUBLE, yAxis.getNumberType()); 412 assertEquals(false, yAxis.isAutoScale()); 413 assertTrue(yAxis.getLowerBound() instanceof Double); 414 assertTrue(yAxis.getUpperBound() instanceof Double); 415 assertEquals(new Double(-0.1), yAxis.getLowerBound()); 416 assertEquals(new Double(1.1), yAxis.getUpperBound()); 417 } 418 419 /** 420 * Tests <code>parse</code> method. 421 * 422 * @throws Exception If test fails. 423 */ 424 public void testParse1() throws Exception { 425 String defs = "streams MyStreamsA()= {\"MyStreamsA Description\", MyReducerA()};\n" 426 + "chart MyChartA() = {\"description \",(A(),a()), (B (),b()), (C (), c()) };\n" 427 + "report MyReportA ()= {\"description\", A(), B(), C()};\n" 428 + "draw A ( ) ;\n" 429 + "streams MyStreamsB() = {\"description\", MyreducerB()};\n" 430 + "draw B (\"b1\", \"b2\");\n"; 431 List<TelemetryDefinition> list = TelemetryLanguageParser.parse(defs); 432 assertEquals(6, list.size()); 433 assertTrue(list.get(0) instanceof TelemetryStreamsDefinition); 434 assertTrue(list.get(1) instanceof TelemetryChartDefinition); 435 assertTrue(list.get(2) instanceof TelemetryReportDefinition); 436 assertTrue(list.get(3) instanceof DrawCommand); 437 assertTrue(list.get(4) instanceof TelemetryStreamsDefinition); 438 assertTrue(list.get(5) instanceof DrawCommand); 439 440 // check DrawCommand, no need to check others since other test cases did 441 // that. 442 DrawCommand draw = (DrawCommand) list.get(3); 443 assertEquals("A", draw.getTelemetryDefinitionName()); 444 assertEquals(0, draw.getParameters().length); 445 446 draw = (DrawCommand) list.get(5); 447 assertEquals("B", draw.getTelemetryDefinitionName()); 448 assertEquals(2, draw.getParameters().length); 449 assertEquals("b1", ((StringConstant) draw.getParameters()[0]).getValue()); 450 assertEquals("b2", ((StringConstant) draw.getParameters()[1]).getValue()); 451 452 // another test 453 defs = "streams S() = {\"active time\", ActiveTime(\"**\")};\n" 454 + "draw S();"; 455 list = TelemetryLanguageParser.parse(defs); 456 assertEquals(2, list.size()); 457 } 458 459 /** 460 * Tests <code>parse</code> method. 461 * 462 * @throws Exception If test fails. 463 */ 464 public void testParse2() throws Exception { 465 String defs = "streams CodeSizeStream(FilePattern)" 466 + "= {\"Lines of Code\", \"unit\", JavaFileMetric(\"Sloc\", FilePattern)};" 467 + "chart CodeSizeChart()" 468 + "= {\"Code Size\", CodeSizeStream(\"**\"), CodeSizeStream(\"**/*.java\")};" 469 + "stream CoverageStream()" // should use "streams" instead of "stream" 470 + "= {\"Test Coverage\", \"unit\", JavaCoverage(\"NumOfCoveredMethods\")" 471 + "/ (JavaCoverage(\"NumOfCoveredMethods\")+JavaCoverage(\"NumOfUncoveredMethods\"))};" 472 + "chart CoverageChart()" + "= {\"Coverage\", CoverageStream()};" 473 + "report MyReport() = {\"Test\", CodeSizeChart(), CoverageChart()};" + "draw MyReport();"; 474 475 try { 476 TelemetryLanguageParser.parse(defs); 477 fail("Error in telemetry language not caught!"); 478 } 479 catch (ParsingException ex) { 480 // expected 481 } 482 } 483 484 /** 485 * Tests recovering definition string operation. 486 * 487 * @throws Exception If test fails. 488 */ 489 public void testRecoveringDefinitionString() throws Exception { 490 String defs = "streams MyStreamsA()= {\"description\", MyReducerA()}; " 491 + "chart MyChartA() = \n{\"description \",(A(),a()), (B (),b()), \n(C (), c()) }; " 492 + "report MyReportA ()= {\"description\", A(), B(), C()};\n" 493 + "draw A \n\n\n( ) ;\n" 494 + " streams MyStreamsB() = {\"description\", MyreducerB()};\n" 495 + "draw B (\"b1\", \"b2\");\n"; 496 List<TelemetryDefinition> list = TelemetryLanguageParser.parse(defs); 497 assertEquals(6, list.size()); 498 assertTrue(list.get(0) instanceof TelemetryStreamsDefinition); 499 assertTrue(list.get(1) instanceof TelemetryChartDefinition); 500 assertTrue(list.get(2) instanceof TelemetryReportDefinition); 501 assertTrue(list.get(3) instanceof DrawCommand); 502 assertTrue(list.get(4) instanceof TelemetryStreamsDefinition); 503 assertTrue(list.get(5) instanceof DrawCommand); 504 505 String[] expectedDefStrings = new String[] { 506 "streams MyStreamsA()= {\"description\", MyReducerA()};", 507 "chart MyChartA() = \n{\"description \",(A(),a()), (B (),b()), \n(C (), c()) };", 508 "report MyReportA ()= {\"description\", A(), B(), C()};", 509 "draw A \n\n\n( ) ;", 510 "streams MyStreamsB() = {\"description\", MyreducerB()};", 511 "draw B (\"b1\", \"b2\");", 512 }; 513 for (int i = 0; i < 6; i++) { 514 TelemetryDefinition telemetryDefinition = list.get(i); 515 assertEquals(expectedDefStrings[i], telemetryDefinition.getDefinitionString()); 516 } 517 } 518 }