diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2024-04-04 20:27:05 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2024-04-04 20:27:05 (GMT) |
| commit | 135dbc82bcd192e73bc436fd845ad0ff34b0a579 (patch) | |
| tree | 0f96b74c63f4945ebf38344226d2b865a5dc5840 /generic/tclTest.c | |
| parent | a77dbf237f91b1bf832c042ea9f376c7e707f9b1 (diff) | |
| parent | 236e3e1beace12620e71c3bc5abb2616d69c1f07 (diff) | |
| download | tcl-135dbc82bcd192e73bc436fd845ad0ff34b0a579.zip tcl-135dbc82bcd192e73bc436fd845ad0ff34b0a579.tar.gz tcl-135dbc82bcd192e73bc436fd845ad0ff34b0a579.tar.bz2 | |
Add testcases for bug [7cb7409e05]: Tcl_ParseArgsObjv bug with TCL_ARGV_GENFUNC. Mark failing testcases with "knownBug"
Diffstat (limited to 'generic/tclTest.c')
| -rw-r--r-- | generic/tclTest.c | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/generic/tclTest.c b/generic/tclTest.c index 3d46d8b..37b9717 100644 --- a/generic/tclTest.c +++ b/generic/tclTest.c @@ -7829,6 +7829,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. @@ -7840,6 +7841,30 @@ TestconcatobjCmd( */ static int +ParseMedia( + void *clientData, + Tcl_Interp *interp, + int objc, + 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( ClientData dummy, /* Not used. */ Tcl_Interp *interp, /* Current interpreter. */ @@ -7847,11 +7872,14 @@ TestparseargsCmd( Tcl_Obj *const objv[]) /* Arguments. */ { static int foo = 0; + const char *media = NULL, *color = NULL; int count = objc; - Tcl_Obj **remObjv, *result[3]; - Tcl_ArgvInfo argTable[] = { - {TCL_ARGV_CONSTANT, "-bool", INT2PTR(1), &foo, "booltest", NULL}, - TCL_ARGV_AUTO_REST, TCL_ARGV_AUTO_HELP, TCL_ARGV_TABLE_END + 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 }; foo = 0; @@ -7861,7 +7889,9 @@ TestparseargsCmd( result[0] = Tcl_NewIntObj(foo); result[1] = Tcl_NewIntObj(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; } |
