MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / function_arg_minsize

Method function_arg_minsize

test/testlibrary.cpp:469–529  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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);

Callers

nothing calls this directly

Calls 4

astOperand1Method · 0.80
nextMethod · 0.80
frontMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected