From 76d522c15c4747dd57a04f688ca7096f511544f1 Mon Sep 17 00:00:00 2001 From: sverweij Date: Wed, 4 Jul 2018 10:00:27 +0200 Subject: [PATCH] test(parse): add some tests for the parser --- test/parse/04-labels.json | 7 ++ test/parse/13-label-errors.json | 23 ++++++ test/parse/fixtures/states-with-a-label.dot | 48 ++++++++++++ .../fixtures}/states-with-a-label.html | 0 test/parse/fixtures/states-with-a-label.json | 73 ++++++++++++++++++ test/parse/fixtures/states-with-a-label.smcat | 17 ++++ test/parse/smcat-parser.spec.js | 6 +- test/render/dot.spec.js | 4 +- ...s-one-state-composite-with-activities.json | 58 ++++++++++++++ ...one-state-composite-with-activities.scjson | 51 ++++++++++++ ...-one-state-composite-with-activities.scxml | 17 ++++ ...-one-state-composite-with-activities.smcat | 11 +++ ...ls-one-state-composite-with-activities.svg | 77 +++++++++++++++++++ .../801-labels-one-state-with-activities.json | 10 +++ ...01-labels-one-state-with-activities.scjson | 11 +++ ...801-labels-one-state-with-activities.scxml | 6 ++ ...801-labels-one-state-with-activities.smcat | 1 + .../801-labels-one-state-with-activities.svg | 22 ++++++ .../render/fixtures/801-labels-one-state.json | 9 +++ .../fixtures/801-labels-one-state.scjson | 8 ++ .../fixtures/801-labels-one-state.scxml | 5 ++ .../fixtures/801-labels-one-state.smcat | 1 + test/render/fixtures/801-labels-one-state.svg | 20 +++++ test/render/html.spec.js | 4 +- test/render/smcat.spec.js | 1 + test/render/states-with-a-label.dot | 22 ------ test/render/states-with-a-label.json | 18 ----- 27 files changed, 484 insertions(+), 46 deletions(-) create mode 100644 test/parse/04-labels.json create mode 100644 test/parse/13-label-errors.json create mode 100644 test/parse/fixtures/states-with-a-label.dot rename test/{render => parse/fixtures}/states-with-a-label.html (100%) create mode 100644 test/parse/fixtures/states-with-a-label.json create mode 100644 test/parse/fixtures/states-with-a-label.smcat create mode 100644 test/render/fixtures/801-labels-one-state-composite-with-activities.json create mode 100644 test/render/fixtures/801-labels-one-state-composite-with-activities.scjson create mode 100644 test/render/fixtures/801-labels-one-state-composite-with-activities.scxml create mode 100644 test/render/fixtures/801-labels-one-state-composite-with-activities.smcat create mode 100644 test/render/fixtures/801-labels-one-state-composite-with-activities.svg create mode 100644 test/render/fixtures/801-labels-one-state-with-activities.json create mode 100644 test/render/fixtures/801-labels-one-state-with-activities.scjson create mode 100644 test/render/fixtures/801-labels-one-state-with-activities.scxml create mode 100644 test/render/fixtures/801-labels-one-state-with-activities.smcat create mode 100644 test/render/fixtures/801-labels-one-state-with-activities.svg create mode 100644 test/render/fixtures/801-labels-one-state.json create mode 100644 test/render/fixtures/801-labels-one-state.scjson create mode 100644 test/render/fixtures/801-labels-one-state.scxml create mode 100644 test/render/fixtures/801-labels-one-state.smcat create mode 100644 test/render/fixtures/801-labels-one-state.svg delete mode 100644 test/render/states-with-a-label.dot delete mode 100644 test/render/states-with-a-label.json diff --git a/test/parse/04-labels.json b/test/parse/04-labels.json new file mode 100644 index 00000000..2bd27d3c --- /dev/null +++ b/test/parse/04-labels.json @@ -0,0 +1,7 @@ +[ + { + "title": "simple states with labels", + "programInputFile": "fixtures/states-with-a-label.smcat", + "astFixtureFile": "fixtures/states-with-a-label.json" + } +] diff --git a/test/parse/13-label-errors.json b/test/parse/13-label-errors.json new file mode 100644 index 00000000..e0f2c5b1 --- /dev/null +++ b/test/parse/13-label-errors.json @@ -0,0 +1,23 @@ + +[ + { + "title": "composite states - forgot the ']'", + "program": "a [;" + }, + { + "title": "composite states - nothing between []", + "program": "a [];" + }, + { + "title": "composite states - illegal stuff between []", + "program": "a [ fluffy unicorns ];" + }, + { + "title": "composite states - label but no equals or lhs", + "program": "a [ label];" + }, + { + "title": "composite states - label but lhs", + "program": "a [ label=];" + } +] diff --git a/test/parse/fixtures/states-with-a-label.dot b/test/parse/fixtures/states-with-a-label.dot new file mode 100644 index 00000000..3b4fb3b7 --- /dev/null +++ b/test/parse/fixtures/states-with-a-label.dot @@ -0,0 +1,48 @@ +digraph "state transitions" { + pack=42 splines=true ordering=out compound=true overlap=scale K=0.9 epsilon=0.9 nodesep=0.2 + fontname="Helvetica" fontsize=12 penwidth=2.0 + + node [shape=plaintext style=filled fillcolor=white fontname=Helvetica fontsize=12 penwidth=2.0] + edge [fontname=Helvetica fontsize=10] + + "unset" [margin=0 label= < + + +
alarm not set
+ >] + subgraph "cluster_set" { + label= < + + +
+ +
alarm set
show a bell
+ > style=rounded penwidth=2.0 + "set" [shape=point style=invis margin=0 width=0 height=0 fixedsize=true] + "silent" [margin=0 label= < + + +
silent
+ >] + "ringing" [margin=0 label= < + + +
bzzzz!
+ >] + "snoozing" [margin=0 label= < + + +
+ +
snoozing
show a plus behind the bell
+ >] + + } + + "unset" -> "set" [label="time entered \l" lhead="cluster_set"] + "silent" -> "ringing" [label="time >= alarm time \l"] + "ringing" -> "silent" [label="off \l"] + "ringing" -> "snoozing" [label="snooze time := time + 9 min \l"] + "snoozing" -> "ringing" [label="time >= snooze time \l"] + "snoozing" -> "silent" [label="off \l"] +} diff --git a/test/render/states-with-a-label.html b/test/parse/fixtures/states-with-a-label.html similarity index 100% rename from test/render/states-with-a-label.html rename to test/parse/fixtures/states-with-a-label.html diff --git a/test/parse/fixtures/states-with-a-label.json b/test/parse/fixtures/states-with-a-label.json new file mode 100644 index 00000000..17a4fb6c --- /dev/null +++ b/test/parse/fixtures/states-with-a-label.json @@ -0,0 +1,73 @@ +{ + "states": [ + { + "name": "unset", + "type": "regular", + "label": "alarm not set" + }, + { + "name": "set", + "type": "regular", + "label": "alarm set", + "statemachine": { + "states": [ + { + "name": "silent", + "type": "regular" + }, + { + "name": "ringing", + "type": "regular", + "label": "bzzzz!" + }, + { + "name": "snoozing", + "type": "regular", + "activities": "show a plus behind the bell" + } + ], + "transitions": [ + { + "from": "silent", + "to": "ringing", + "label": "time >= alarm time", + "event": "time >= alarm time" + }, + { + "from": "ringing", + "to": "silent", + "label": "off", + "event": "off" + }, + { + "from": "ringing", + "to": "snoozing", + "label": "snooze time := time + 9 min", + "event": "snooze time := time + 9 min" + }, + { + "from": "snoozing", + "to": "ringing", + "label": "time >= snooze time", + "event": "time >= snooze time" + }, + { + "from": "snoozing", + "to": "silent", + "label": "off", + "event": "off" + } + ] + }, + "activities": "show a bell" + } + ], + "transitions": [ + { + "from": "unset", + "to": "set", + "label": "time entered", + "event": "time entered" + } + ] +} \ No newline at end of file diff --git a/test/parse/fixtures/states-with-a-label.smcat b/test/parse/fixtures/states-with-a-label.smcat new file mode 100644 index 00000000..ca6a52e5 --- /dev/null +++ b/test/parse/fixtures/states-with-a-label.smcat @@ -0,0 +1,17 @@ + + +unset [label="alarm not set"], +set [label="alarm set"]: show a bell { + silent, + ringing [label="bzzzz!"], + snoozing: show a plus behind the bell; + + silent => ringing: time >= alarm time; + ringing => silent: off; + ringing => snoozing: snooze time := time + 9 min; + snoozing => ringing: time >= snooze time; + snoozing => silent: off; +}; + + +unset => set: time entered; diff --git a/test/parse/smcat-parser.spec.js b/test/parse/smcat-parser.spec.js index 11d5baec..4413e0e1 100644 --- a/test/parse/smcat-parser.spec.js +++ b/test/parse/smcat-parser.spec.js @@ -16,10 +16,12 @@ const programASTPairs = const syntaxErrors = require("./10-no-transitions-errors.json") .concat(require("./11-transition-errors.json")) - .concat(require("./12-composition-errors.json")); + .concat(require("./12-composition-errors.json")) + .concat(require("./13-label-errors.json")); const fileBasedPairs = - require("./02-comments.json"); + require("./02-comments.json") + .concat(require("./04-labels.json")); describe('#parse() - happy day ASTs - ', () => { diff --git a/test/render/dot.spec.js b/test/render/dot.spec.js index 39b5cffb..ab487586 100644 --- a/test/render/dot.spec.js +++ b/test/render/dot.spec.js @@ -30,8 +30,8 @@ const testPairs = [{ "expectedOutput": "../parse/fixtures/pseudostates.dot" }, { "title": "renders pseudo states", - "input": "./states-with-a-label.json", - "expectedOutput": "./states-with-a-label.dot" + "input": "../parse/fixtures/states-with-a-label.json", + "expectedOutput": "../parse/fixtures/states-with-a-label.dot" }]; describe('render dot', () => { diff --git a/test/render/fixtures/801-labels-one-state-composite-with-activities.json b/test/render/fixtures/801-labels-one-state-composite-with-activities.json new file mode 100644 index 00000000..69b7cddf --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-composite-with-activities.json @@ -0,0 +1,58 @@ +{ + "states": [ + { + "name": "set", + "type": "regular", + "label": "alarm set", + "statemachine": { + "states": [ + { + "name": "silent", + "type": "regular" + }, + { + "name": "ringing", + "type": "regular" + }, + { + "name": "snoozing", + "type": "regular" + } + ], + "transitions": [ + { + "from": "silent", + "to": "ringing", + "label": "time >= alarm time", + "event": "time >= alarm time" + }, + { + "from": "ringing", + "to": "silent", + "label": "off", + "event": "off" + }, + { + "from": "ringing", + "to": "snoozing", + "label": "snooze time := time + 9 min", + "event": "snooze time := time + 9 min" + }, + { + "from": "snoozing", + "to": "ringing", + "label": "time >= snooze time", + "event": "time >= snooze time" + }, + { + "from": "snoozing", + "to": "silent", + "label": "off", + "event": "off" + } + ] + }, + "activities": "some activities" + } + ] +} \ No newline at end of file diff --git a/test/render/fixtures/801-labels-one-state-composite-with-activities.scjson b/test/render/fixtures/801-labels-one-state-composite-with-activities.scjson new file mode 100644 index 00000000..a6998617 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-composite-with-activities.scjson @@ -0,0 +1,51 @@ +{ + "states": [ + { + "kind": "state", + "id": "set", + "onentries": [ + "some activities" + ], + "states": [ + { + "kind": "state", + "id": "silent", + "transitions": [ + { + "target": "ringing", + "event": "time____alarm_time" + } + ] + }, + { + "kind": "state", + "id": "ringing", + "transitions": [ + { + "target": "silent", + "event": "off" + }, + { + "target": "snoozing", + "event": "snooze_time_:__time___9_min" + } + ] + }, + { + "kind": "state", + "id": "snoozing", + "transitions": [ + { + "target": "ringing", + "event": "time____snooze_time" + }, + { + "target": "silent", + "event": "off" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/test/render/fixtures/801-labels-one-state-composite-with-activities.scxml b/test/render/fixtures/801-labels-one-state-composite-with-activities.scxml new file mode 100644 index 00000000..83b728e9 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-composite-with-activities.scxml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + some activities + + diff --git a/test/render/fixtures/801-labels-one-state-composite-with-activities.smcat b/test/render/fixtures/801-labels-one-state-composite-with-activities.smcat new file mode 100644 index 00000000..78246c72 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-composite-with-activities.smcat @@ -0,0 +1,11 @@ +set [label="alarm set"]: some activities { + silent, + ringing, + snoozing; + + silent => ringing: time >= alarm time; + ringing => silent: off; + ringing => snoozing: snooze time := time + 9 min; + snoozing => ringing: time >= snooze time; + snoozing => silent: off; +}; diff --git a/test/render/fixtures/801-labels-one-state-composite-with-activities.svg b/test/render/fixtures/801-labels-one-state-composite-with-activities.svg new file mode 100644 index 00000000..c244fcf0 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-composite-with-activities.svg @@ -0,0 +1,77 @@ + + + + + + +state transitions + + +cluster_set + +alarm set +some activities + + + + + +silent + +silent + + + + +ringing + +ringing + + + + +silent->ringing + + +time >= alarm time    + + + +ringing->silent + + +off    + + + +snoozing + +snoozing + + + + +ringing->snoozing + + +snooze time := time + 9 min    + + + +snoozing->silent + + +off    + + + +snoozing->ringing + + +time >= snooze time    + + + diff --git a/test/render/fixtures/801-labels-one-state-with-activities.json b/test/render/fixtures/801-labels-one-state-with-activities.json new file mode 100644 index 00000000..c19943f1 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-with-activities.json @@ -0,0 +1,10 @@ +{ + "states": [ + { + "name": "unset", + "type": "regular", + "label": "alarm not set", + "activities": "some activity" + } + ] +} \ No newline at end of file diff --git a/test/render/fixtures/801-labels-one-state-with-activities.scjson b/test/render/fixtures/801-labels-one-state-with-activities.scjson new file mode 100644 index 00000000..e98b00b0 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-with-activities.scjson @@ -0,0 +1,11 @@ +{ + "states": [ + { + "kind": "state", + "id": "unset", + "onentries": [ + "some activity" + ] + } + ] +} \ No newline at end of file diff --git a/test/render/fixtures/801-labels-one-state-with-activities.scxml b/test/render/fixtures/801-labels-one-state-with-activities.scxml new file mode 100644 index 00000000..c155a924 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-with-activities.scxml @@ -0,0 +1,6 @@ + + + + some activity + + diff --git a/test/render/fixtures/801-labels-one-state-with-activities.smcat b/test/render/fixtures/801-labels-one-state-with-activities.smcat new file mode 100644 index 00000000..aa6be96c --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-with-activities.smcat @@ -0,0 +1 @@ +unset [label="alarm not set"]: some activity; diff --git a/test/render/fixtures/801-labels-one-state-with-activities.svg b/test/render/fixtures/801-labels-one-state-with-activities.svg new file mode 100644 index 00000000..114f6030 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state-with-activities.svg @@ -0,0 +1,22 @@ + + + + + + +state transitions + + + +unset + +alarm not set +some activity + + + + + diff --git a/test/render/fixtures/801-labels-one-state.json b/test/render/fixtures/801-labels-one-state.json new file mode 100644 index 00000000..35cf132f --- /dev/null +++ b/test/render/fixtures/801-labels-one-state.json @@ -0,0 +1,9 @@ +{ + "states": [ + { + "name": "unset", + "type": "regular", + "label": "alarm not set" + } + ] +} \ No newline at end of file diff --git a/test/render/fixtures/801-labels-one-state.scjson b/test/render/fixtures/801-labels-one-state.scjson new file mode 100644 index 00000000..396bbc96 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state.scjson @@ -0,0 +1,8 @@ +{ + "states": [ + { + "kind": "state", + "id": "unset" + } + ] +} \ No newline at end of file diff --git a/test/render/fixtures/801-labels-one-state.scxml b/test/render/fixtures/801-labels-one-state.scxml new file mode 100644 index 00000000..afb08e43 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state.scxml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/render/fixtures/801-labels-one-state.smcat b/test/render/fixtures/801-labels-one-state.smcat new file mode 100644 index 00000000..1a931ae5 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state.smcat @@ -0,0 +1 @@ +unset [label="alarm not set"]; diff --git a/test/render/fixtures/801-labels-one-state.svg b/test/render/fixtures/801-labels-one-state.svg new file mode 100644 index 00000000..65b92797 --- /dev/null +++ b/test/render/fixtures/801-labels-one-state.svg @@ -0,0 +1,20 @@ + + + + + + +state transitions + + + +unset + +alarm not set + + + + diff --git a/test/render/html.spec.js b/test/render/html.spec.js index 08d9a142..eed26c35 100644 --- a/test/render/html.spec.js +++ b/test/render/html.spec.js @@ -21,8 +21,8 @@ const testPairs = [{ "expectedOutput": "../parse/fixtures/minimal.html" }, { "title": "renders pseudo states", - "input": "./states-with-a-label.json", - "expectedOutput": "./states-with-a-label.html" + "input": "../parse/fixtures/states-with-a-label.json", + "expectedOutput": "../parse/fixtures/states-with-a-label.html" }]; describe('render html', () => { diff --git a/test/render/smcat.spec.js b/test/render/smcat.spec.js index 3dd3072f..973c5993 100644 --- a/test/render/smcat.spec.js +++ b/test/render/smcat.spec.js @@ -6,6 +6,7 @@ const programASTPairs = require("../parse/00-no-transitions.json") .concat(require("../parse/01-transitions-only.json")) .concat(require("../parse/03-composite.json")); + // .concat(require("../parse/04-labels.json")) describe('#parse(convert) - happy day ASTs - ', () => { programASTPairs.forEach((pPair) => { diff --git a/test/render/states-with-a-label.dot b/test/render/states-with-a-label.dot deleted file mode 100644 index 18bc3350..00000000 --- a/test/render/states-with-a-label.dot +++ /dev/null @@ -1,22 +0,0 @@ -digraph "state transitions" { - pack=42 splines=true ordering=out compound=true overlap=scale K=0.9 epsilon=0.9 nodesep=0.2 - fontname="Helvetica" fontsize=12 penwidth=2.0 - - node [shape=plaintext style=filled fillcolor=white fontname=Helvetica fontsize=12 penwidth=2.0] - edge [fontname=Helvetica fontsize=10] - - "unset" [margin=0 label= < - - -
alarm not set
- >] - "set" [margin=0 label= < - - -
- -
alarm set
show a bell
- >] - - "unset" -> "set" [label="time entered \l"] -} diff --git a/test/render/states-with-a-label.json b/test/render/states-with-a-label.json deleted file mode 100644 index 288d2c97..00000000 --- a/test/render/states-with-a-label.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "states": [{ - "name": "unset", - "label": "alarm not set", - "type": "regular" - }, { - "name": "set", - "label": "alarm set", - "type": "regular", - "activities": "show a bell" - }], - "transitions": [{ - "from": "unset", - "to": "set", - "label": "time entered", - "event": "time entered" - }] -} \ No newline at end of file