1 /*------------------------------------------------------------------------- 2 * drawElements Internal Test Module 3 * --------------------------------- 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 *//*! 20 * \file 21 * \brief Miscellaneous framework tests. 22 *//*--------------------------------------------------------------------*/ 23 24 #include "ditFrameworkTests.hpp" 25 #include "tcuFloatFormat.hpp" 26 #include "tcuTestLog.hpp" 27 #include "tcuCommandLine.hpp" 28 29 namespace dit 30 { 31 32 namespace 33 { 34 35 using std::string; 36 using std::vector; 37 using tcu::TestLog; 38 39 struct MatchCase 40 { 41 enum Expected { NO_MATCH, MATCH_GROUP, MATCH_CASE, EXPECTED_LAST }; 42 43 const char* path; 44 Expected expected; 45 }; 46 47 const char* getMatchCaseExpectedDesc (MatchCase::Expected expected) 48 { 49 static const char* descs[] = 50 { 51 "no match", 52 "group to match", 53 "case to match" 54 }; 55 return de::getSizedArrayElement<MatchCase::EXPECTED_LAST>(descs, expected); 56 } 57 58 class CaseListParserCase : public tcu::TestCase 59 { 60 public: 61 CaseListParserCase (tcu::TestContext& testCtx, const char* name, const char* caseList, const MatchCase* subCases, int numSubCases) 62 : tcu::TestCase (testCtx, name, "") 63 , m_caseList (caseList) 64 , m_subCases (subCases) 65 , m_numSubCases (numSubCases) 66 { 67 } 68 69 IterateResult iterate (void) 70 { 71 TestLog& log = m_testCtx.getLog(); 72 tcu::CommandLine cmdLine; 73 int numPass = 0; 74 75 log << TestLog::Message << "Input:\n\"" << m_caseList << "\"" << TestLog::EndMessage; 76 77 { 78 const char* argv[] = 79 { 80 "deqp", 81 "--deqp-caselist", 82 m_caseList 83 }; 84 85 if (!cmdLine.parse(DE_LENGTH_OF_ARRAY(argv), argv)) 86 TCU_FAIL("Failed to parse case list"); 87 } 88 89 for (int subCaseNdx = 0; subCaseNdx < m_numSubCases; subCaseNdx++) 90 { 91 const MatchCase& curCase = m_subCases[subCaseNdx]; 92 bool matchGroup; 93 bool matchCase; 94 95 log << TestLog::Message << "Checking \"" << curCase.path << "\"" 96 << ", expecting " << getMatchCaseExpectedDesc(curCase.expected) 97 << TestLog::EndMessage; 98 99 matchGroup = cmdLine.checkTestGroupName(curCase.path); 100 matchCase = cmdLine.checkTestCaseName(curCase.path); 101 102 if ((matchGroup == (curCase.expected == MatchCase::MATCH_GROUP)) && 103 (matchCase == (curCase.expected == MatchCase::MATCH_CASE))) 104 { 105 log << TestLog::Message << " pass" << TestLog::EndMessage; 106 numPass += 1; 107 } 108 else 109 log << TestLog::Message << " FAIL!" << TestLog::EndMessage; 110 } 111 112 m_testCtx.setTestResult((numPass == m_numSubCases) ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL, 113 (numPass == m_numSubCases) ? "All passed" : "Unexpected match result"); 114 115 return STOP; 116 } 117 118 private: 119 const char* const m_caseList; 120 const MatchCase* const m_subCases; 121 const int m_numSubCases; 122 }; 123 124 class NegativeCaseListCase : public tcu::TestCase 125 { 126 public: 127 NegativeCaseListCase (tcu::TestContext& testCtx, const char* name, const char* caseList) 128 : tcu::TestCase (testCtx, name, "") 129 , m_caseList (caseList) 130 { 131 } 132 133 IterateResult iterate (void) 134 { 135 TestLog& log = m_testCtx.getLog(); 136 tcu::CommandLine cmdLine; 137 138 log << TestLog::Message << "Input:\n\"" << m_caseList << "\"" << TestLog::EndMessage; 139 140 { 141 const char* argv[] = 142 { 143 "deqp", 144 "--deqp-caselist", 145 m_caseList 146 }; 147 148 if (cmdLine.parse(DE_LENGTH_OF_ARRAY(argv), argv)) 149 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Parsing passed, should have failed"); 150 else 151 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Parsing failed as expected"); 152 } 153 154 return STOP; 155 } 156 157 private: 158 const char* const m_caseList; 159 }; 160 161 class TrieParserTests : public tcu::TestCaseGroup 162 { 163 public: 164 TrieParserTests (tcu::TestContext& testCtx) 165 : tcu::TestCaseGroup(testCtx, "trie", "Test case trie parser tests") 166 { 167 } 168 169 void init (void) 170 { 171 { 172 static const char* const caseList = "{test}"; 173 static const MatchCase subCases[] = 174 { 175 { "test", MatchCase::MATCH_CASE }, 176 { "test.cd", MatchCase::NO_MATCH }, 177 }; 178 addChild(new CaseListParserCase(m_testCtx, "single_case", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 179 } 180 { 181 static const char* const caseList = "{a{b}}"; 182 static const MatchCase subCases[] = 183 { 184 { "a", MatchCase::MATCH_GROUP }, 185 { "b", MatchCase::NO_MATCH }, 186 { "a.b", MatchCase::MATCH_CASE }, 187 { "a.a", MatchCase::NO_MATCH }, 188 }; 189 addChild(new CaseListParserCase(m_testCtx, "simple_group_1", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 190 } 191 { 192 static const char* const caseList = "{a{b,c}}"; 193 static const MatchCase subCases[] = 194 { 195 { "a", MatchCase::MATCH_GROUP }, 196 { "b", MatchCase::NO_MATCH }, 197 { "a.b", MatchCase::MATCH_CASE }, 198 { "a.a", MatchCase::NO_MATCH }, 199 { "a.c", MatchCase::MATCH_CASE }, 200 }; 201 addChild(new CaseListParserCase(m_testCtx, "simple_group_2", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 202 } 203 { 204 static const char* const caseList = "{a{b},c{d,e}}"; 205 static const MatchCase subCases[] = 206 { 207 { "a", MatchCase::MATCH_GROUP }, 208 { "b", MatchCase::NO_MATCH }, 209 { "a.b", MatchCase::MATCH_CASE }, 210 { "a.c", MatchCase::NO_MATCH }, 211 { "a.d", MatchCase::NO_MATCH }, 212 { "a.e", MatchCase::NO_MATCH }, 213 { "c", MatchCase::MATCH_GROUP }, 214 { "c.b", MatchCase::NO_MATCH }, 215 { "c.d", MatchCase::MATCH_CASE }, 216 { "c.e", MatchCase::MATCH_CASE }, 217 }; 218 addChild(new CaseListParserCase(m_testCtx, "two_groups", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 219 } 220 { 221 static const char* const caseList = "{a,c{d,e}}"; 222 static const MatchCase subCases[] = 223 { 224 { "a", MatchCase::MATCH_CASE }, 225 { "b", MatchCase::NO_MATCH }, 226 { "a.b", MatchCase::NO_MATCH }, 227 { "a.c", MatchCase::NO_MATCH }, 228 { "a.d", MatchCase::NO_MATCH }, 229 { "a.e", MatchCase::NO_MATCH }, 230 { "c", MatchCase::MATCH_GROUP }, 231 { "c.b", MatchCase::NO_MATCH }, 232 { "c.d", MatchCase::MATCH_CASE }, 233 { "c.e", MatchCase::MATCH_CASE }, 234 }; 235 addChild(new CaseListParserCase(m_testCtx, "case_group", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 236 } 237 { 238 static const char* const caseList = "{c{d,e},a}"; 239 static const MatchCase subCases[] = 240 { 241 { "a", MatchCase::MATCH_CASE }, 242 { "b", MatchCase::NO_MATCH }, 243 { "a.b", MatchCase::NO_MATCH }, 244 { "a.c", MatchCase::NO_MATCH }, 245 { "a.d", MatchCase::NO_MATCH }, 246 { "a.e", MatchCase::NO_MATCH }, 247 { "c", MatchCase::MATCH_GROUP }, 248 { "c.b", MatchCase::NO_MATCH }, 249 { "c.d", MatchCase::MATCH_CASE }, 250 { "c.e", MatchCase::MATCH_CASE }, 251 }; 252 addChild(new CaseListParserCase(m_testCtx, "group_case", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 253 } 254 { 255 static const char* const caseList = "{test}\r"; 256 static const MatchCase subCases[] = 257 { 258 { "test", MatchCase::MATCH_CASE }, 259 { "test.cd", MatchCase::NO_MATCH }, 260 }; 261 addChild(new CaseListParserCase(m_testCtx, "trailing_cr", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 262 } 263 { 264 static const char* const caseList = "{test}\n"; 265 static const MatchCase subCases[] = 266 { 267 { "test", MatchCase::MATCH_CASE }, 268 { "test.cd", MatchCase::NO_MATCH }, 269 }; 270 addChild(new CaseListParserCase(m_testCtx, "trailing_lf", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 271 } 272 { 273 static const char* const caseList = "{test}\r\n"; 274 static const MatchCase subCases[] = 275 { 276 { "test", MatchCase::MATCH_CASE }, 277 { "test.cd", MatchCase::NO_MATCH }, 278 }; 279 addChild(new CaseListParserCase(m_testCtx, "trailing_crlf", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 280 } 281 282 // Negative tests 283 addChild(new NegativeCaseListCase(m_testCtx, "empty_string", "")); 284 addChild(new NegativeCaseListCase(m_testCtx, "empty_line", "\n")); 285 addChild(new NegativeCaseListCase(m_testCtx, "empty_root", "{}")); 286 addChild(new NegativeCaseListCase(m_testCtx, "empty_group", "{test{}}")); 287 addChild(new NegativeCaseListCase(m_testCtx, "empty_group_name_1", "{{}}")); 288 addChild(new NegativeCaseListCase(m_testCtx, "empty_group_name_2", "{{test}}")); 289 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_1", "{")); 290 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_2", "{test")); 291 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_3", "{test,")); 292 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_4", "{test{a}")); 293 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_root_5", "{a,b")); 294 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_group_1", "{test{")); 295 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_group_2", "{test{a")); 296 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_group_3", "{test{a,")); 297 addChild(new NegativeCaseListCase(m_testCtx, "unterminated_group_4", "{test{a,b")); 298 addChild(new NegativeCaseListCase(m_testCtx, "empty_case_name_1", "{a,,b}")); 299 addChild(new NegativeCaseListCase(m_testCtx, "empty_case_name_2", "{,b}")); 300 addChild(new NegativeCaseListCase(m_testCtx, "empty_case_name_3", "{a,}")); 301 addChild(new NegativeCaseListCase(m_testCtx, "no_separator", "{a{b}c}")); 302 addChild(new NegativeCaseListCase(m_testCtx, "invalid_char_1", "{a.b}")); 303 addChild(new NegativeCaseListCase(m_testCtx, "invalid_char_2", "{a[]}")); 304 addChild(new NegativeCaseListCase(m_testCtx, "trailing_char_1", "{a}}")); 305 addChild(new NegativeCaseListCase(m_testCtx, "trailing_char_2", "{a}x")); 306 addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_1", "{\na}")); 307 addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_2", "{a\n,b}")); 308 addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_3", "{a,\nb}")); 309 addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_4", "{a{b\n}}")); 310 addChild(new NegativeCaseListCase(m_testCtx, "embedded_newline_5", "{a{b}\n}")); 311 } 312 }; 313 314 class ListParserTests : public tcu::TestCaseGroup 315 { 316 public: 317 ListParserTests (tcu::TestContext& testCtx) 318 : tcu::TestCaseGroup(testCtx, "list", "Test case list parser tests") 319 { 320 } 321 322 void init (void) 323 { 324 { 325 static const char* const caseList = "test"; 326 static const MatchCase subCases[] = 327 { 328 { "test", MatchCase::MATCH_CASE }, 329 { "test.cd", MatchCase::NO_MATCH }, 330 }; 331 addChild(new CaseListParserCase(m_testCtx, "single_case", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 332 } 333 { 334 static const char* const caseList = "a.b"; 335 static const MatchCase subCases[] = 336 { 337 { "a", MatchCase::MATCH_GROUP }, 338 { "b", MatchCase::NO_MATCH }, 339 { "a.b", MatchCase::MATCH_CASE }, 340 { "a.a", MatchCase::NO_MATCH }, 341 }; 342 addChild(new CaseListParserCase(m_testCtx, "simple_group_1", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 343 } 344 { 345 static const char* const caseList = "a.b\na.c"; 346 static const MatchCase subCases[] = 347 { 348 { "a", MatchCase::MATCH_GROUP }, 349 { "b", MatchCase::NO_MATCH }, 350 { "a.b", MatchCase::MATCH_CASE }, 351 { "a.a", MatchCase::NO_MATCH }, 352 { "a.c", MatchCase::MATCH_CASE }, 353 }; 354 addChild(new CaseListParserCase(m_testCtx, "simple_group_2", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 355 } 356 { 357 static const char* const caseList = "a.b\na.c"; 358 static const MatchCase subCases[] = 359 { 360 { "a", MatchCase::MATCH_GROUP }, 361 { "b", MatchCase::NO_MATCH }, 362 { "a.b", MatchCase::MATCH_CASE }, 363 { "a.a", MatchCase::NO_MATCH }, 364 { "a.c", MatchCase::MATCH_CASE }, 365 }; 366 addChild(new CaseListParserCase(m_testCtx, "separator_ln", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 367 } 368 { 369 static const char* const caseList = "a.b\ra.c"; 370 static const MatchCase subCases[] = 371 { 372 { "a", MatchCase::MATCH_GROUP }, 373 { "b", MatchCase::NO_MATCH }, 374 { "a.b", MatchCase::MATCH_CASE }, 375 { "a.a", MatchCase::NO_MATCH }, 376 { "a.c", MatchCase::MATCH_CASE }, 377 }; 378 addChild(new CaseListParserCase(m_testCtx, "separator_cr", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 379 } 380 { 381 static const char* const caseList = "a.b\r\na.c"; 382 static const MatchCase subCases[] = 383 { 384 { "a", MatchCase::MATCH_GROUP }, 385 { "b", MatchCase::NO_MATCH }, 386 { "a.b", MatchCase::MATCH_CASE }, 387 { "a.a", MatchCase::NO_MATCH }, 388 { "a.c", MatchCase::MATCH_CASE }, 389 }; 390 addChild(new CaseListParserCase(m_testCtx, "separator_crlf", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 391 } 392 { 393 static const char* const caseList = "a.b\na.c\n"; 394 static const MatchCase subCases[] = 395 { 396 { "a", MatchCase::MATCH_GROUP }, 397 { "b", MatchCase::NO_MATCH }, 398 { "a.b", MatchCase::MATCH_CASE }, 399 { "a.a", MatchCase::NO_MATCH }, 400 { "a.c", MatchCase::MATCH_CASE }, 401 }; 402 addChild(new CaseListParserCase(m_testCtx, "end_ln", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 403 } 404 { 405 static const char* const caseList = "a.b\na.c\r"; 406 static const MatchCase subCases[] = 407 { 408 { "a", MatchCase::MATCH_GROUP }, 409 { "b", MatchCase::NO_MATCH }, 410 { "a.b", MatchCase::MATCH_CASE }, 411 { "a.a", MatchCase::NO_MATCH }, 412 { "a.c", MatchCase::MATCH_CASE }, 413 }; 414 addChild(new CaseListParserCase(m_testCtx, "end_cr", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 415 } 416 { 417 static const char* const caseList = "a.b\na.c\r\n"; 418 static const MatchCase subCases[] = 419 { 420 { "a", MatchCase::MATCH_GROUP }, 421 { "b", MatchCase::NO_MATCH }, 422 { "a.b", MatchCase::MATCH_CASE }, 423 { "a.a", MatchCase::NO_MATCH }, 424 { "a.c", MatchCase::MATCH_CASE }, 425 }; 426 addChild(new CaseListParserCase(m_testCtx, "end_crlf", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 427 } 428 { 429 static const char* const caseList = "a.b\nc.d\nc.e"; 430 static const MatchCase subCases[] = 431 { 432 { "a", MatchCase::MATCH_GROUP }, 433 { "b", MatchCase::NO_MATCH }, 434 { "a.b", MatchCase::MATCH_CASE }, 435 { "a.c", MatchCase::NO_MATCH }, 436 { "a.d", MatchCase::NO_MATCH }, 437 { "a.e", MatchCase::NO_MATCH }, 438 { "c", MatchCase::MATCH_GROUP }, 439 { "c.b", MatchCase::NO_MATCH }, 440 { "c.d", MatchCase::MATCH_CASE }, 441 { "c.e", MatchCase::MATCH_CASE }, 442 }; 443 addChild(new CaseListParserCase(m_testCtx, "two_groups", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 444 } 445 { 446 static const char* const caseList = "a\nc.d\nc.e"; 447 static const MatchCase subCases[] = 448 { 449 { "a", MatchCase::MATCH_CASE }, 450 { "b", MatchCase::NO_MATCH }, 451 { "a.b", MatchCase::NO_MATCH }, 452 { "a.c", MatchCase::NO_MATCH }, 453 { "a.d", MatchCase::NO_MATCH }, 454 { "a.e", MatchCase::NO_MATCH }, 455 { "c", MatchCase::MATCH_GROUP }, 456 { "c.b", MatchCase::NO_MATCH }, 457 { "c.d", MatchCase::MATCH_CASE }, 458 { "c.e", MatchCase::MATCH_CASE }, 459 }; 460 addChild(new CaseListParserCase(m_testCtx, "case_group", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 461 } 462 { 463 static const char* const caseList = "c.d\nc.e\na"; 464 static const MatchCase subCases[] = 465 { 466 { "a", MatchCase::MATCH_CASE }, 467 { "b", MatchCase::NO_MATCH }, 468 { "a.b", MatchCase::NO_MATCH }, 469 { "a.c", MatchCase::NO_MATCH }, 470 { "a.d", MatchCase::NO_MATCH }, 471 { "a.e", MatchCase::NO_MATCH }, 472 { "c", MatchCase::MATCH_GROUP }, 473 { "c.b", MatchCase::NO_MATCH }, 474 { "c.d", MatchCase::MATCH_CASE }, 475 { "c.e", MatchCase::MATCH_CASE }, 476 }; 477 addChild(new CaseListParserCase(m_testCtx, "group_case", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 478 } 479 { 480 static const char* const caseList = "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.x"; 481 static const MatchCase subCases[] = 482 { 483 { "a", MatchCase::MATCH_GROUP }, 484 { "b", MatchCase::NO_MATCH }, 485 { "a.b", MatchCase::MATCH_GROUP }, 486 { "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.x", MatchCase::MATCH_CASE }, 487 }; 488 addChild(new CaseListParserCase(m_testCtx, "long_name", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 489 } 490 { 491 static const char* const caseList = 492 "a.b.c.d.e\n" 493 "a.b.c.f\n" 494 "x.y.z\n" 495 "a.b.c.d.g\n" 496 "a.b.c.x\n"; 497 static const MatchCase subCases[] = 498 { 499 { "a", MatchCase::MATCH_GROUP }, 500 { "a.b", MatchCase::MATCH_GROUP }, 501 { "a.b.c.d.e", MatchCase::MATCH_CASE }, 502 { "a.b.c.d.g", MatchCase::MATCH_CASE }, 503 { "x.y", MatchCase::MATCH_GROUP }, 504 { "x.y.z", MatchCase::MATCH_CASE }, 505 { "a.b.c.f", MatchCase::MATCH_CASE }, 506 { "a.b.c.x", MatchCase::MATCH_CASE }, 507 }; 508 addChild(new CaseListParserCase(m_testCtx, "partial_prefix", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 509 } 510 { 511 static const char* const caseList = 512 "a.a.c.d\n" 513 "a.b.c.d\n"; 514 static const MatchCase subCases[] = 515 { 516 { "a", MatchCase::MATCH_GROUP }, 517 { "a.a", MatchCase::MATCH_GROUP }, 518 { "a.b.c.d", MatchCase::MATCH_CASE }, 519 { "a.b.c.d", MatchCase::MATCH_CASE }, 520 }; 521 addChild(new CaseListParserCase(m_testCtx, "reparenting", caseList, subCases, DE_LENGTH_OF_ARRAY(subCases))); 522 } 523 524 // Negative tests 525 addChild(new NegativeCaseListCase(m_testCtx, "empty_string", "")); 526 addChild(new NegativeCaseListCase(m_testCtx, "empty_line", "\n")); 527 addChild(new NegativeCaseListCase(m_testCtx, "empty_group_name", ".test")); 528 addChild(new NegativeCaseListCase(m_testCtx, "empty_case_name", "test.")); 529 } 530 }; 531 532 class CaseListParserTests : public tcu::TestCaseGroup 533 { 534 public: 535 CaseListParserTests (tcu::TestContext& testCtx) 536 : tcu::TestCaseGroup(testCtx, "case_list_parser", "Test case list parser tests") 537 { 538 } 539 540 void init (void) 541 { 542 addChild(new TrieParserTests(m_testCtx)); 543 addChild(new ListParserTests(m_testCtx)); 544 } 545 }; 546 547 class CommonFrameworkTests : public tcu::TestCaseGroup 548 { 549 public: 550 CommonFrameworkTests (tcu::TestContext& testCtx) 551 : tcu::TestCaseGroup(testCtx, "common", "Tests for the common utility framework") 552 { 553 } 554 555 void init (void) 556 { 557 addChild(new SelfCheckCase(m_testCtx, "float_format","tcu::FloatFormat_selfTest()", 558 tcu::FloatFormat_selfTest)); 559 addChild(new CaseListParserTests(m_testCtx)); 560 } 561 }; 562 563 } // anonymous 564 565 FrameworkTests::FrameworkTests (tcu::TestContext& testCtx) 566 : tcu::TestCaseGroup(testCtx, "framework", "Miscellaneous framework tests") 567 { 568 } 569 570 FrameworkTests::~FrameworkTests (void) 571 { 572 } 573 574 void FrameworkTests::init (void) 575 { 576 addChild(new CommonFrameworkTests(m_testCtx)); 577 } 578 579 } 580