diff options
Diffstat (limited to 'users/wpcarro/slx.js/tests.js')
-rw-r--r-- | users/wpcarro/slx.js/tests.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/users/wpcarro/slx.js/tests.js b/users/wpcarro/slx.js/tests.js new file mode 100644 index 000000000000..9ed68a588c55 --- /dev/null +++ b/users/wpcarro/slx.js/tests.js @@ -0,0 +1,68 @@ +import { createRoot } from "react-dom/client"; +import React from "react"; + + +const john = { first: 'John', last: 'Cleese', age: 83, birthday: new Date("10/27/1939") }; +const graham = { first: 'Graham', last: 'Chapman', age: 48, birthday: new Date("01/08/1941") }; + +const xs = [ + john, + graham, +]; +const cfg = { + caseSensitive: false, + preferRegex: true, + dateKey: 'birthday', +}; +const tests = [ + ['support EQ', 'age=83', xs, cfg, [john]], + ['supports LT', 'age<83', xs, cfg, [graham]], + ['supports LTE', 'age<=83', xs, cfg, [john, graham]], + ['supports GT', 'age>48', xs, cfg, [john]], + ['supports GTE', 'age>=48', xs, cfg, [john, graham]], + ['supports grouping (1)', 'last:/^C/ (age=83 OR age=48)', xs, cfg, [john, graham]], + ['supports grouping (2)', '(age=83)', xs, cfg, [john]], + ['supports grouping (3)', '(age=83 OR age=48)', xs, cfg, [john, graham]], +]; + +function equal(xs, ys) { + return xs.length === ys.length && xs.every((x, i) => x === ys[i]); +} + +class App extends React.Component { + constructor(props) { + super(props); + } + render() { + return ( + <table> + <thead> + <th>pass/fail</th> + <th>Label</th> + <th>code</th> + <th>actual</th> + <th>expected</th> + </thead> + <tbody> + {this.props.tests.map(test => { + const [label, query, xs, cfg, expected] = test; + const actual = select(query, xs, cfg); + return ( + <tr style={{backgroundColor: equal(actual, expected) ? null : 'red'}}> + <td>{equal(actual, expected) ? "pass" : "fail"}</td> + <td>{label}</td> + <td>select("{query}", {JSON.stringify(xs)}, {JSON.stringify(cfg)})</td> + <td>{JSON.stringify(actual)}</td> + <td>{JSON.stringify(expected)}</td> + </tr> + ); + })} + </tbody> + </table> + ); + } +} + +const container = document.getElementById("mount"); +const root = createRoot(container); +root.render(<App tests={tests} />); |