| 467 | } |
| 468 | |
| 469 | void function_arg_minsize() const { |
| 470 | constexpr char xmldata[] = "<?xml version=\"1.0\"?>\n" |
| 471 | "<def>\n" |
| 472 | " <function name=\"foo\">\n" |
| 473 | " <arg nr=\"1\"><minsize type=\"strlen\" arg=\"2\"/></arg>\n" |
| 474 | " <arg nr=\"2\"><minsize type=\"argvalue\" arg=\"3\"/></arg>\n" |
| 475 | " <arg nr=\"3\"/>\n" |
| 476 | " <arg nr=\"4\"><minsize type=\"value\" value=\"500\"/></arg>\n" |
| 477 | " <arg nr=\"5\"><minsize type=\"value\" value=\"4\" baseType=\"int\"/></arg>\n" |
| 478 | " </function>\n" |
| 479 | "</def>"; |
| 480 | |
| 481 | Library library; |
| 482 | ASSERT(LibraryHelper::loadxmldata(library, xmldata, sizeof(xmldata))); |
| 483 | |
| 484 | const char code[] = "foo(a,b,c,d,e);"; |
| 485 | SimpleTokenList tokenList(code); |
| 486 | tokenList.front()->next()->astOperand1(tokenList.front()); |
| 487 | |
| 488 | // arg1: type=strlen arg2 |
| 489 | const std::vector<Library::ArgumentChecks::MinSize> *minsizes = library.argminsizes(tokenList.front(),1); |
| 490 | ASSERT_EQUALS(true, minsizes != nullptr); |
| 491 | ASSERT_EQUALS(1U, minsizes ? minsizes->size() : 1U); |
| 492 | if (minsizes && minsizes->size() == 1U) { |
| 493 | const Library::ArgumentChecks::MinSize &m = minsizes->front(); |
| 494 | ASSERT_EQUALS(true, Library::ArgumentChecks::MinSize::Type::STRLEN == m.type); |
| 495 | ASSERT_EQUALS(2, m.arg); |
| 496 | } |
| 497 | |
| 498 | // arg2: type=argvalue arg3 |
| 499 | minsizes = library.argminsizes(tokenList.front(), 2); |
| 500 | ASSERT_EQUALS(true, minsizes != nullptr); |
| 501 | ASSERT_EQUALS(1U, minsizes ? minsizes->size() : 1U); |
| 502 | if (minsizes && minsizes->size() == 1U) { |
| 503 | const Library::ArgumentChecks::MinSize &m = minsizes->front(); |
| 504 | ASSERT_EQUALS(true, Library::ArgumentChecks::MinSize::Type::ARGVALUE == m.type); |
| 505 | ASSERT_EQUALS(3, m.arg); |
| 506 | } |
| 507 | |
| 508 | // arg4: type=value |
| 509 | minsizes = library.argminsizes(tokenList.front(), 4); |
| 510 | ASSERT_EQUALS(true, minsizes != nullptr); |
| 511 | ASSERT_EQUALS(1U, minsizes ? minsizes->size() : 1U); |
| 512 | if (minsizes && minsizes->size() == 1U) { |
| 513 | const Library::ArgumentChecks::MinSize &m = minsizes->front(); |
| 514 | ASSERT(Library::ArgumentChecks::MinSize::Type::VALUE == m.type); |
| 515 | ASSERT_EQUALS(500, m.value); |
| 516 | ASSERT_EQUALS("", m.baseType); |
| 517 | } |
| 518 | |
| 519 | // arg5: type=value |
| 520 | minsizes = library.argminsizes(tokenList.front(), 5); |
| 521 | ASSERT_EQUALS(true, minsizes != nullptr); |
| 522 | ASSERT_EQUALS(1U, minsizes ? minsizes->size() : 1U); |
| 523 | if (minsizes && minsizes->size() == 1U) { |
| 524 | const Library::ArgumentChecks::MinSize& m = minsizes->front(); |
| 525 | ASSERT(Library::ArgumentChecks::MinSize::Type::VALUE == m.type); |
| 526 | ASSERT_EQUALS(4, m.value); |
nothing calls this directly
no test coverage detected