From ca7584209dc8686e46081bb6cfe28a219c95b403 Mon Sep 17 00:00:00 2001 From: "jeremy@jermolene.com" Date: Mon, 10 Apr 2023 17:48:04 +0100 Subject: [PATCH] Testcasewidget: Add tabs for switching between source tiddlers --- core/modules/widgets/testcase.js | 7 +++ core/ui/TestCases/DefaultTemplate.tid | 10 ++-- core/ui/TestCases/DefaultTemplateSource.tid | 5 ++ .../tiddlers/widgets/TestCaseWidget.tid | 55 ++++++++++++++++++- 4 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 core/ui/TestCases/DefaultTemplateSource.tid diff --git a/core/modules/widgets/testcase.js b/core/modules/widgets/testcase.js index ee298e85a..b23d5c025 100644 --- a/core/modules/widgets/testcase.js +++ b/core/modules/widgets/testcase.js @@ -63,6 +63,13 @@ TestCaseWidget.prototype.render = function(parent,nextSibling) { this.testcaseWiki.registerPluginTiddlers("plugin"); this.testcaseWiki.unpackPluginTiddlers(); this.testcaseWiki.addIndexersToWiki(); + // Gemerate a `transclusion` variable that depends on the values of the payload tiddlers so that the template can easily make unique state tiddlers + this.setVariable("transclusion",$tw.utils.hashString(this.testcaseWiki.getTiddlersAsJson("[all[tiddlers]]"))); + // Generate a `testcaseInfo` variable that contains information about the subwiki in JSON format + var testcaseInfoData = { + titles: this.testcaseWiki.allTitles() + }; + this.setVariable("testcaseInfo",JSON.stringify(testcaseInfoData)); // Render children from the template this.renderChildren(parent,nextSibling); }; diff --git a/core/ui/TestCases/DefaultTemplate.tid b/core/ui/TestCases/DefaultTemplate.tid index 5056393e7..15e25fae2 100644 --- a/core/ui/TestCases/DefaultTemplate.tid +++ b/core/ui/TestCases/DefaultTemplate.tid @@ -1,18 +1,20 @@ title: $:/core/ui/testcases/DefaultTemplate \whitespace trim +<$let + state={{{ [] }}} +>

<$testcase-transclude tiddler="Description" mode="inline"/>

-
-<$testcase-view tiddler="Output"/>
-
+<$macrocall $name="tabs" tabsList="[jsonget[titles]] -Description -ExpectedResult -[has[plugin-type]]" state=<> default="Output" template="$:/core/ui/testcases/DefaultTemplate/Source"/>
<$testcase-transclude tiddler="Output"/>
-
\ No newline at end of file + + diff --git a/core/ui/TestCases/DefaultTemplateSource.tid b/core/ui/TestCases/DefaultTemplateSource.tid new file mode 100644 index 000000000..b025a9dfc --- /dev/null +++ b/core/ui/TestCases/DefaultTemplateSource.tid @@ -0,0 +1,5 @@ +title: $:/core/ui/testcases/DefaultTemplate/Source + +
+<$testcase-view tiddler=<>/>
+
diff --git a/editions/tw5.com/tiddlers/widgets/TestCaseWidget.tid b/editions/tw5.com/tiddlers/widgets/TestCaseWidget.tid index bda827c05..b60c070c2 100644 --- a/editions/tw5.com/tiddlers/widgets/TestCaseWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/TestCaseWidget.tid @@ -11,16 +11,67 @@ The testcase widget creates an independent subwiki loaded with specified tiddler ! Content and Attributes -The content of the `<$testcase>` widget is not displayed but instead is scanned for <<.wlink DataWidget>> widgets that define tiddlers to be included in the test case. +The content of the `<$testcase>` widget is not displayed but instead is scanned for <<.wlink DataWidget>> widgets that define the payload tiddlers to be included in the test case. |!Attribute |!Description | |<<.attr testcase-tiddler>> |Optional title of a tiddler containing a test case in `text/vnd.tiddlywiki-multiple` format (see below) | |<<.attr template>> |Optional title of the template used to display the testcase (defaults to $:/core/ui/testcases/DefaultTemplate) | +! Payload Tiddlers + +The payload tiddlers are the tiddler values that are loaded into the subwiki that is created to run the tests. + +The payload tiddlers can be created in two different ways: + +* Tiddlers values specfied via <<.wlink DataWidget>> widgets within the body of the `<$testcase>` widget +* As multiple tiddlers embedded within a single tiddler of type `text/vnd.tiddlywiki-multiple` whose title is given in the <<.attr testcase-tiddler>> attribute + +The special tiddler type `text/vnd.tiddlywiki-multiple` is intended to simplify creating test cases that require several tiddlers. The text field consists of a series of tiddlers in the same format as `.tid` files, each separated by a line containing a single `+` character. + +For example: + +``` +title: First +tags: one two + +This is the first tiddler ++ +title: Second +tags: three four + +This is the second tiddler ++ +title: third +tags: five six + +This is the third tiddler +``` + +! Test Case Templates + +The test case template specified in the <<.attr template>> attribute can display and render tiddlers from the subwiki using the <<.wlink TestCaseTranscludeWidget>> and <<.wlink TestCaseViewWidget>> widgets. + +The default test case template $:/core/ui/testcases/DefaultTemplate displays a split view with the source tiddlers on the left and the rendered tiddler titled `Output` on the right. It also displays the tiddler titled `Description` as the heading. + +The `<$testcase>` widget assigns a value to the `transclusion` variable that depends on the combined values of all the payload tiddlers. This means that using the `<>` macro within a test case template will generate a unique value for each of multiple test cases within the same tiddler. + +The `<$testcase>` widget also assigns a block of information about the subwiki in JSON format to a the variable `testcaseInfo`. It contains the following properties: + +* ''titles'': an array of the titles of all the tiddlers in the subwiki (excluding shadow tiddlers) + +! Test Case Conventions + +The following conventions are used for test case tiddlers: + +* `Description` contains a brief description of the test (rendered in inline mode) +* `Output` contains the tiddler text to be rendered. It can also reference other tiddlers +* `ExpectedResult` contains the HTML that should match the rendering of the tiddler `Output` + ! Example <$testcase> -<$data $tiddler="$:/core"/> +<$data $tiddler="$:/core/ui/testcases/DefaultTemplate"/> +<$data $tiddler="$:/core/ui/testcases/DefaultTemplate/Source"/> <$data title="Description" text="Simple example of a test case"/> <$data title="Output" text="""<$testcase> <$data title="Description" text="How to calculate 2 plus 2"/>