diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2024-04-04 20:01:44 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2024-04-04 20:01:44 (GMT) |
commit | 7769b8861e967901e3687c387ed3724ee84d3b0e (patch) | |
tree | a1029790c606c580d742dc8c50ae6f1b24a21764 /generic | |
parent | 48a19154a3513c2209ba69d2740f83e0ca5fc93c (diff) | |
download | tcl-7769b8861e967901e3687c387ed3724ee84d3b0e.zip tcl-7769b8861e967901e3687c387ed3724ee84d3b0e.tar.gz tcl-7769b8861e967901e3687c387ed3724ee84d3b0e.tar.bz2 |
Combine with "testparseargs" command. With testcases now
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclTest.c | 113 |
1 files changed, 32 insertions, 81 deletions
diff --git a/generic/tclTest.c b/generic/tclTest.c index 5491d80..cc193ef 100644 --- a/generic/tclTest.c +++ b/generic/tclTest.c @@ -246,7 +246,6 @@ static Tcl_ObjCmdProc TestbumpinterpepochObjCmd; static Tcl_ObjCmdProc TestbytestringObjCmd; static Tcl_ObjCmdProc TestsetbytearraylengthObjCmd; static Tcl_ObjCmdProc TestpurebytesobjObjCmd; -static Tcl_ObjCmdProc TestparseargsObjCmd; static Tcl_ObjCmdProc TeststringbytesObjCmd; static Tcl_ObjCmdProc Testutf16stringObjCmd; static Tcl_ObjCmdProc TestcmdinfoObjCmd; @@ -593,7 +592,6 @@ Tcltest_Init( Tcl_CreateCommand(interp, "noop", NoopCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "noop", NoopObjCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "testpurebytesobj", TestpurebytesobjObjCmd, NULL, NULL); - Tcl_CreateObjCommand(interp, "testparseargsobj", TestparseargsObjCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "testsetbytearraylength", TestsetbytearraylengthObjCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "testbytestring", TestbytestringObjCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "teststringbytes", TeststringbytesObjCmd, NULL, NULL); @@ -5645,83 +5643,6 @@ TestpurebytesobjObjCmd( /* *---------------------------------------------------------------------- * - * TestparseargsObjCmd -- - * - * This object-based procedure tests the TCL_ARGV_GENFUNC functionality. - * - * Results: - * Returns the TCL_OK result code. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -static int -ParseMedia( - TCL_UNUSED(void *), - Tcl_Interp *interp, - TCL_UNUSED(int), - Tcl_Obj *const *objv, - void *dstPtr) -{ - static const char *const mediaOpts[] = {"A4", "Legal", "Letter", NULL}; - static const char *const ExtendedMediaOpts[] = { - "Paper size is ISO A4", "Paper size is US Legal", - "Paper size is US Letter", NULL}; - int index; - const char **media = (const char **) dstPtr; - - if (Tcl_GetIndexFromObjStruct(interp, objv[0], mediaOpts, - sizeof(char *), "media", 0, &index) != TCL_OK) { - return -1; - } - - *media = ExtendedMediaOpts[index]; - return 1; -} - -static int -TestparseargsObjCmd( - TCL_UNUSED(void *), - Tcl_Interp *interp, - int objc, - Tcl_Obj *const objv[]) -{ - Tcl_Size count; - - const char *media = NULL, *color = NULL; - - const Tcl_ArgvInfo argTable[] = { - {TCL_ARGV_STRING, "-colormode" , NULL, &color, "color mode", NULL}, - {TCL_ARGV_GENFUNC, "-media", ParseMedia, &media, "media page size", NULL}, - TCL_ARGV_TABLE_END - }; - - if (objc%2 != 1) { - Tcl_WrongNumArgs(interp, 1, objv, "?-opt arg ...?"); - return TCL_ERROR; - } - - count = objc; - - if (Tcl_ParseArgsObjv(interp, argTable, &count, objv, NULL)!=TCL_OK) { - return TCL_ERROR; - } - - /* show color and media parsed values */ - Tcl_SetObjResult(interp, Tcl_ObjPrintf("Color: |%d|%s|, Media: |%d|%s|", - color?1:0, color?color:"NO COLOR", - media?1:0, media?media:"NO MEDIA" - )); - - return TCL_OK; -} - -/* - *---------------------------------------------------------------------- - * * TestsetbytearraylengthObjCmd -- * * Testing command 'testsetbytearraylength` used to test the public @@ -8483,6 +8404,7 @@ TestconcatobjCmd( * This procedure implements the "testparseargs" command. It is used to * test that Tcl_ParseArgsObjv does indeed return the right number of * arguments. In other words, that [Bug 3413857] was fixed properly. + * Also test for bug [7cb7409e05] * * Results: * A standard Tcl result. @@ -8494,6 +8416,30 @@ TestconcatobjCmd( */ static int +ParseMedia( + TCL_UNUSED(void *), + Tcl_Interp *interp, + TCL_UNUSED(int), + Tcl_Obj *const *objv, + void *dstPtr) +{ + static const char *const mediaOpts[] = {"A4", "Legal", "Letter", NULL}; + static const char *const ExtendedMediaOpts[] = { + "Paper size is ISO A4", "Paper size is US Legal", + "Paper size is US Letter", NULL}; + int index; + const char **media = (const char **) dstPtr; + + if (Tcl_GetIndexFromObjStruct(interp, objv[0], mediaOpts, + sizeof(char *), "media", 0, &index) != TCL_OK) { + return -1; + } + + *media = ExtendedMediaOpts[index]; + return 1; +} + +static int TestparseargsCmd( TCL_UNUSED(void *), Tcl_Interp *interp, /* Current interpreter. */ @@ -8501,10 +8447,13 @@ TestparseargsCmd( Tcl_Obj *const objv[]) /* Arguments. */ { static int foo = 0; + const char *media = NULL, *color = NULL; Tcl_Size count = objc; - Tcl_Obj **remObjv, *result[3]; + Tcl_Obj **remObjv, *result[5]; const Tcl_ArgvInfo argTable[] = { {TCL_ARGV_CONSTANT, "-bool", INT2PTR(1), &foo, "booltest", NULL}, + {TCL_ARGV_STRING, "-colormode" , NULL, &color, "color mode", NULL}, + {TCL_ARGV_GENFUNC, "-media", ParseMedia, &media, "media page size", NULL}, TCL_ARGV_AUTO_REST, TCL_ARGV_AUTO_HELP, TCL_ARGV_TABLE_END }; @@ -8515,7 +8464,9 @@ TestparseargsCmd( result[0] = Tcl_NewWideIntObj(foo); result[1] = Tcl_NewWideIntObj(count); result[2] = Tcl_NewListObj(count, remObjv); - Tcl_SetObjResult(interp, Tcl_NewListObj(3, result)); + result[3] = Tcl_NewStringObj(color ? color : "NULL", -1); + result[4] = Tcl_NewStringObj(media ? media : "NULL", -1); + Tcl_SetObjResult(interp, Tcl_NewListObj(5, result)); ckfree(remObjv); return TCL_OK; } |