From d2cb5714faa8e3c9f583924a3f9a345d915aadd9 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 14 Jun 2022 13:48:01 +0000 Subject: Add more testcases for Tcl_GetRange() --- generic/tclTestObj.c | 20 ++++++++++++++++---- tests/stringObj.test | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c index 3fe9d02..b1a0afa 100644 --- a/generic/tclTestObj.c +++ b/generic/tclTestObj.c @@ -1184,7 +1184,7 @@ TeststringobjCmd( Tcl_Obj **varPtr; static const char *const options[] = { "append", "appendstrings", "get", "get2", "length", "length2", - "set", "set2", "setlength", "maxchars", "getunicode", + "set", "set2", "setlength", "maxchars", "range", "getunicode", "appendself", "appendself2", NULL }; @@ -1350,13 +1350,25 @@ TeststringobjCmd( } Tcl_SetIntObj(Tcl_GetObjResult(interp), length); break; - case 10: /* getunicode */ + case 10: { /* range */ + int first, last; + if (objc != 5) { + goto wrongNumArgs; + } + if ((Tcl_GetIntFromObj(interp, objv[3], &first) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[4], &last) != TCL_OK)) { + return TCL_ERROR; + } + Tcl_SetObjResult(interp, Tcl_GetRange(varPtr[varIndex], first, last)); + break; + } + case 11: /* getunicode */ if (objc != 3) { goto wrongNumArgs; } Tcl_GetUnicodeFromObj(varPtr[varIndex], NULL); break; - case 11: /* appendself */ + case 12: /* appendself */ if (objc != 4) { goto wrongNumArgs; } @@ -1387,7 +1399,7 @@ TeststringobjCmd( Tcl_AppendToObj(varPtr[varIndex], string + i, length - i); Tcl_SetObjResult(interp, varPtr[varIndex]); break; - case 12: /* appendself2 */ + case 13: /* appendself2 */ if (objc != 4) { goto wrongNumArgs; } diff --git a/tests/stringObj.test b/tests/stringObj.test index bfe9da1..b799828 100644 --- a/tests/stringObj.test +++ b/tests/stringObj.test @@ -481,6 +481,31 @@ test stringObj-15.8 {Tcl_Append*ToObj: self appends} testobj { teststringobj appendself2 1 3 } foo +test stringObj-16.0 {Tcl_GetRange: normal case} testobj { + teststringobj set 1 abcde + teststringobj range 1 1 3 +} bcd +test stringObj-16.1 {Tcl_GetRange: first > end} testobj { + teststringobj set 1 abcde + teststringobj range 1 10 5 +} {} +test stringObj-16.2 {Tcl_GetRange: last > end} testobj { + teststringobj set 1 abcde + teststringobj range 1 3 13 +} de +test stringObj-16.3 {Tcl_GetRange: first = -1} testobj { + teststringobj set 1 abcde + teststringobj range 1 -1 3 +} abcd +test stringObj-16.4 {Tcl_GetRange: last = -1} testobj { + teststringobj set 1 abcde + teststringobj range 1 1 -1 +} bcde +test stringObj-16.5 {Tcl_GetRange: fist = last = -1} testobj { + teststringobj set 1 abcde + teststringobj range 1 -1 -1 +} abcde + if {[testConstraint testobj]} { testobj freeallvars -- cgit v0.12