Skip to content

Commit a7549e6

Browse files
committed
another long js test
1 parent 7749297 commit a7549e6

File tree

4 files changed

+115
-5
lines changed

4 files changed

+115
-5
lines changed

salty.cabal

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ cabal-version: 1.12
44
--
55
-- see: https://github.com/sol/hpack
66
--
7-
-- hash: de87688a8c0ef5fc7533bb54220ff935324c137d25dea6745d4d70ec6fd6e936
7+
-- hash: 8edb419b4c8d90e40ed1a6a5aa2587cab392fe2baa01d8b36cacff164c458a78
88

99
name: salty
1010
version: 0.1.0.0
@@ -76,7 +76,8 @@ test-suite salty-test
7676
main-is: Spec.hs
7777
other-modules:
7878
JsSpec
79-
LongExamples.Js.SimpleWebPage.Pages
79+
LongExamples.Js.SimpleWebPage.Controller
80+
LongExamples.Js.SimpleWebPage.Nav
8081
PhpSpec
8182
TestUtils
8283
Paths_salty

test/LongExamples/Js/SimpleWebPage/Pages.hs test/LongExamples/Js/SimpleWebPage/Controller.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{-# LANGUAGE QuasiQuotes #-}
2-
module LongExamples.Js.SimpleWebPage.Pages where
2+
module LongExamples.Js.SimpleWebPage.Controller where
33
import Text.RawString.QQ
44

55
import Test.HUnit
+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
{-# LANGUAGE QuasiQuotes #-}
2+
module LongExamples.Js.SimpleWebPage.Nav where
3+
import Text.RawString.QQ
4+
5+
import Test.HUnit
6+
import Parser
7+
import Types
8+
import TestUtils
9+
10+
tests = [
11+
salty `matchesJs` expectedJs
12+
]
13+
14+
15+
salty = [r|import * as React from "react"
16+
17+
class NavItem extends React.Component {
18+
getClass := guard
19+
| @props.selected == true -> "nav-link active"
20+
| _ -> "nav-link"
21+
22+
render := {
23+
li.new({className: "nav-item"}) do
24+
a.new({
25+
href: "#",
26+
className: @getClass(),
27+
key: @props.navId,
28+
children: @props.title,
29+
onClick: (\e -> {
30+
e.preventDefault()
31+
@props.navItemClicked(@props.navId)
32+
})
33+
})
34+
end
35+
}
36+
}
37+
38+
export default class Nav extends React.Component where
39+
constructor props := {
40+
super(props)
41+
@navItemClicked = props.navItemClicked
42+
@state = {
43+
steps: [
44+
"Shop preferences",
45+
"Name your shop",
46+
"Stock your shop",
47+
"How you'll get paid",
48+
"Set up billing"
49+
]
50+
}
51+
}
52+
53+
render := {
54+
ul.new({className: "nav nav-pills"}) do
55+
@@steps.map(\step i -> {
56+
NavItem.new({
57+
navId: i,
58+
title: step,
59+
selected: (i == @props.selected),
60+
navItemClicked: (\id -> {
61+
@setState({
62+
selected: id
63+
}, (\_ -> @navItemClicked(id))
64+
)
65+
})
66+
})
67+
})
68+
end
69+
}
70+
|]
71+
72+
expectedJs = [r|import * as React from "react";
73+
class NavItem extends React.Component {
74+
getClass() {
75+
if (this.props.selected === true) {
76+
return "nav-link active";
77+
} else {
78+
return "nav-link";
79+
}
80+
}
81+
render() {
82+
return (<li className="nav-item"><a href="#" className={this.getClass()} key={this.props.navId} children={this.props.title} onClick={((e) => {
83+
e.preventDefault();
84+
return this.props.navItemClicked(this.props.navId);
85+
})}></a></li>);
86+
}
87+
}
88+
export default class Nav extends React.Component {
89+
constructor(props) {
90+
super(props);
91+
this.navItemClicked = props.navItemClicked;
92+
this.state = {
93+
"steps": ["Shop preferences", "Name your shop", "Stock your shop", "How you'll get paid", "Set up billing"]
94+
}
95+
}
96+
render() {
97+
return (<ul className="nav nav-pills">{this.state.steps.map((step, i) => {
98+
return <NavItem navId={i} title={step} selected={(i === this.props.selected)} navItemClicked={((id) => {
99+
return this.setState({
100+
"selected": id
101+
}, (() => {
102+
return this.navItemClicked(id);
103+
}));
104+
})}></NavItem>
105+
})}</ul>);
106+
}
107+
}|]

test/Spec.hs

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
import Test.HUnit
33
import qualified PhpSpec
44
import qualified JsSpec
5-
import qualified LongExamples.Js.SimpleWebPage.Pages
5+
import qualified LongExamples.Js.SimpleWebPage.Controller
6+
import qualified LongExamples.Js.SimpleWebPage.Nav
67

78
allTests = TestList $
89
PhpSpec.phpTests
910
++ JsSpec.jsTests
10-
++ LongExamples.Js.SimpleWebPage.Pages.tests
11+
++ LongExamples.Js.SimpleWebPage.Controller.tests
12+
++ LongExamples.Js.SimpleWebPage.Nav.tests
1113

1214
main :: IO ()
1315
main = runTestTT allTests >> return ()

0 commit comments

Comments
 (0)