summaryrefslogtreecommitdiffstats
path: root/generic/tclTest.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-04-04 20:27:05 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-04-04 20:27:05 (GMT)
commit135dbc82bcd192e73bc436fd845ad0ff34b0a579 (patch)
tree0f96b74c63f4945ebf38344226d2b865a5dc5840 /generic/tclTest.c
parenta77dbf237f91b1bf832c042ea9f376c7e707f9b1 (diff)
parent236e3e1beace12620e71c3bc5abb2616d69c1f07 (diff)
downloadtcl-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.c40
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;
}