This repository has been archived by the owner on Aug 23, 2018. It is now read-only.
forked from elm/virtual-dom
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add test scripts and tests for lazy function.
- Loading branch information
1 parent
1fc7140
commit cdb80e8
Showing
8 changed files
with
235 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
node_modules | ||
elm-stuff | ||
elm-stuff | ||
tests/build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
Elm.Native.TestHelpers = {}; | ||
Elm.Native.TestHelpers.make = function(localRuntime) | ||
{ | ||
localRuntime.Native = localRuntime.Native || {}; | ||
localRuntime.Native.TestHelpers = localRuntime.Native.TestHelpers || {}; | ||
if (localRuntime.Native.TestHelpers.values) | ||
{ | ||
return localRuntime.Native.TestHelpers.values; | ||
} | ||
|
||
function unsafeRecordCallCount(f) { | ||
function wrapper(a) { | ||
wrapper.__elm_test_call_count += 1; | ||
return f(a); | ||
} | ||
wrapper.__elm_test_call_count = 0; | ||
return wrapper; | ||
} | ||
|
||
function unsafeQueryCallCount(f) { | ||
if (f.__elm_test_call_count === undefined) { | ||
return -1; | ||
} | ||
return f.__elm_test_call_count; | ||
} | ||
|
||
Elm.Native.TestHelpers.values = { | ||
unsafeRecordCallCount: unsafeRecordCallCount, | ||
unsafeQueryCallCount: unsafeQueryCallCount | ||
}; | ||
return localRuntime.Native.TestHelpers.values = Elm.Native.TestHelpers.values; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
module TestCases.Lazy where | ||
|
||
import VirtualDom exposing (Node, lazy) | ||
import ElmTest.Assertion exposing (assertEqual) | ||
import ElmTest.Test exposing (Test, suite, test) | ||
|
||
import TestHelpers exposing (forceRenderDom, unsafeRecordCallCount, unsafeQueryCallCount) | ||
|
||
renderRecord : { x: String, y: String } -> Node | ||
renderRecord r = | ||
VirtualDom.text <| "The values: " ++ r.x ++ ", " ++ r.y | ||
|
||
|
||
renderPrimitive : Int -> Node | ||
renderPrimitive x = | ||
VirtualDom.text <| "The value: " ++ (toString x) | ||
|
||
|
||
testLazyIdenticalRecord = | ||
test "isn't called again with identical record" <| | ||
let record = { x = "a", y = "b" } | ||
wrappedRender = unsafeRecordCallCount renderRecord | ||
lazyRender = lazy wrappedRender | ||
call1 = forceRenderDom <| lazyRender record | ||
call2 = forceRenderDom <| lazyRender record | ||
call3 = forceRenderDom <| lazyRender record | ||
in | ||
assertEqual 1 <| unsafeQueryCallCount wrappedRender | ||
|
||
|
||
testLazyIdenticalPrimitive = | ||
test "isn't called again with identical primitive" <| | ||
let wrappedRender = unsafeRecordCallCount renderPrimitive | ||
lazyRender = lazy wrappedRender | ||
call1 = forceRenderDom <| lazyRender 5 | ||
call2 = forceRenderDom <| lazyRender 5 | ||
call3 = forceRenderDom <| lazyRender 5 | ||
in | ||
assertEqual 1 <| unsafeQueryCallCount wrappedRender | ||
|
||
|
||
testLazyRecordMutationOfIdenticalValue = | ||
test "isn't called again with record mutation of identical value" <| | ||
let record = { x = "a", y = "b" } | ||
wrappedRender = unsafeRecordCallCount renderRecord | ||
lazyRender = lazy wrappedRender | ||
call1 = forceRenderDom <| lazyRender record | ||
call2 = forceRenderDom <| lazyRender { record | x <- "a" } | ||
call3 = forceRenderDom <| lazyRender { record | x <- "a", y <- "b" } | ||
in | ||
assertEqual 1 <| unsafeQueryCallCount wrappedRender | ||
|
||
|
||
testNotLazyDifferentRecord = | ||
test "is called again with an equivalent but different record" <| | ||
let wrappedRender = unsafeRecordCallCount renderRecord | ||
lazyRender = lazy wrappedRender | ||
call1 = forceRenderDom <| lazyRender { x = "a", y = "b" } | ||
call2 = forceRenderDom <| lazyRender { x = "a", y = "b" } | ||
call3 = forceRenderDom <| lazyRender { x = "a", y = "b" } | ||
in | ||
assertEqual 3 <| unsafeQueryCallCount wrappedRender | ||
|
||
|
||
tests : Test | ||
tests = | ||
suite | ||
"Lazy" | ||
[ | ||
testLazyIdenticalRecord, | ||
testLazyIdenticalPrimitive, | ||
testLazyRecordMutationOfIdenticalValue, | ||
testNotLazyDifferentRecord | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
module TestHelpers where | ||
|
||
import VirtualDom exposing (Node) | ||
|
||
import Native.TestHelpers | ||
import Native.VirtualDom | ||
|
||
unsafeRecordCallCount : (a -> b) -> (a -> b) | ||
unsafeRecordCallCount = | ||
Native.TestHelpers.unsafeRecordCallCount | ||
|
||
unsafeQueryCallCount : (a -> b) -> Int | ||
unsafeQueryCallCount = | ||
Native.TestHelpers.unsafeQueryCallCount | ||
|
||
type OpaqueDom = OpaqueDom | ||
|
||
forceRenderDom : Node -> OpaqueDom | ||
forceRenderDom = | ||
Native.VirtualDom.render |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
|
||
import ElmTest.Runner.Console exposing (runDisplay) | ||
import ElmTest.Test exposing (Test, suite) | ||
import IO.IO exposing (IO) | ||
import IO.Runner exposing (Request, Response) | ||
import IO.Runner as Run | ||
|
||
import TestCases.Lazy | ||
|
||
tests : Test | ||
tests = | ||
suite | ||
"VirtualDom Library Tests" | ||
[ | ||
TestCases.Lazy.tests | ||
] | ||
|
||
console : IO () | ||
console = runDisplay tests | ||
|
||
port requests : Signal Request | ||
port requests = Run.run responses console | ||
|
||
port responses : Signal Response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* Implementation from: https://raw.githubusercontent.com/maxsnew/IO/master/elm-io.sh */ | ||
(function() { | ||
var stdin = process.stdin; | ||
var fs = require('fs'); | ||
var worker = Elm.worker(Elm.Main, {responses: null }); | ||
var just = function(v) { | ||
return { 'Just': v}; | ||
}; | ||
var handle = function(request) { | ||
switch (request.ctor) { | ||
case 'Put': | ||
process.stdout.write(request.val); | ||
break; | ||
case 'Get': | ||
stdin.resume(); | ||
break; | ||
case 'Exit': | ||
process.exit(request.val); | ||
break; | ||
case 'WriteFile': | ||
fs.writeFileSync(request.file, request.content); | ||
break; | ||
} | ||
}; | ||
var handler = function(reqs) { | ||
for (var i = 0; i < reqs.length; i++) { | ||
handle(reqs[i]); | ||
} | ||
if (reqs.length > 0 && reqs[reqs.length - 1].ctor !== 'Get') { | ||
worker.ports.responses.send(just('')); | ||
} | ||
}; | ||
worker.ports.requests.subscribe(handler); | ||
|
||
// Read | ||
stdin.on('data', function(chunk) { | ||
stdin.pause(); | ||
worker.ports.responses.send(just(chunk.toString())); | ||
}); | ||
|
||
// Start msg | ||
worker.ports.responses.send(null); | ||
})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
{ | ||
"version": "1.0.0", | ||
"summary": "Test for VirtualDom", | ||
"license": "BSD3", | ||
"repository": "https://github.com/evancz/virtual-dom.git", | ||
"exposed-modules": [], | ||
"source-directories": [ | ||
".", | ||
"build/virtual-dom/" | ||
], | ||
"native-modules": true, | ||
"dependencies": { | ||
"elm-lang/core": "2.1.0 <= v < 3.0.0", | ||
"maxsnew/IO": "1.0.0 <= v < 2.0.0", | ||
"deadfoxygrandpa/Elm-Test": "1.0.3 <= v < 2.0.0" | ||
}, | ||
"elm-version": "0.15.1 <= v < 0.16.0" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
#!/bin/sh | ||
|
||
set -e | ||
|
||
mkdir -p build/virtual-dom/Native | ||
cp ../src/VirtualDom.elm build/virtual-dom/ | ||
$(npm bin)/browserify ../src/wrapper.js -o build/VirtualDom.browser.js | ||
|
||
set +e | ||
diff -u ../src/Native/VirtualDom.js build/VirtualDom.browser.js | ||
if [ $? != 0 ]; then | ||
echo "ERROR:" | ||
echo "src/Native/VirtualDom.js has local modifications or is out of date. Please run rebuild.sh" | ||
exit 1 | ||
fi | ||
set -e | ||
|
||
$(npm bin)/browserify --no-browser-field ../src/wrapper.js -o build/virtual-dom/Native/VirtualDom.js | ||
|
||
elm-make --yes --output build/test.js TestMain.elm | ||
cat elm-io-ports.js >> build/test.js | ||
node build/test.js |