Skip to content

Commit

Permalink
Added SwapView / ViewIndicator unit and functional tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
edurocher committed Dec 3, 2014
1 parent 2ccd8ea commit 48fb578
Show file tree
Hide file tree
Showing 6 changed files with 512 additions and 1 deletion.
24 changes: 24 additions & 0 deletions tests/functional/SwapView.html
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
<meta name="viewport"
content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<title>SwapView</title>

<!-- For testing purposes. Real applications should load the AMD loader directly -->
<script type="text/javascript" src="../boilerplate.js"></script>

</head>
<body style="background: #eeeeee">
<h1>d-SwapView functional test</h1>
<button id="b1">Start</button>
<d-swap-view id="sv" style="width:400px; height:200px">
<div style="background-color: darkblue">Child 1</div>
<div style="background-color: white">Child 2</div>
<div style="background-color: crimson">Child 3</div>
</d-swap-view>
<d-view-indicator id="vi" viewstack="sv" style="width: 400px"></d-view-indicator>
<button id="b2">End</button>
</body>
332 changes: 332 additions & 0 deletions tests/functional/SwapView.js
@@ -0,0 +1,332 @@
define([
"intern", "intern!object", "intern/dojo/node!leadfoot/helpers/pollUntil", "intern/chai!assert",
"intern/dojo/node!leadfoot/keys", "require"
], function (intern, registerSuite, pollUntil, assert, keys, require) {

function loadFile(r, url) {
return r.setExecuteAsyncTimeout(intern.config.WAIT_TIMEOUT).get(require.toUrl(url)).executeAsync(function (d) {
require(["delite/register", "deliteful/SwapView", "deliteful/ViewIndicator",
"requirejs-domready/domReady!"], function (register) {
register.parse();
d();
});
});
}

function getTransformX(v) {
var m = v.match(/matrix\(.*,.*,.*,.*,\s*(.*)\s*,.*\)/);
if (m && m.length > 0) {
return m[1];
} else {
m = v.match(/matrix3d\(.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,\s*(.*)\s*,.*,.*,.*\)/);
if (m && m.length > 0) {
return m[1];
} else {
return "unknown transform";
}
}
}

registerSuite({
name: "SwapView - functional",

"SwapView load": function () {
this.timeout = intern.config.TEST_TIMEOUT;
var remote = this.remote;
return loadFile(remote, "./SwapView.html").findById("sv").then(function () {
pollUntil("return document.getElementById('sv').className == 'd-swap-view d-view-stack'", [], 2000,
intern.config.POLL_INTERVAL);
})
.execute("return document.getElementById('sv').children.length;")
.then(function (v) {
assert.equal(v, 3, "Wrong number of children in SwapView");
})
;
},

"ViewIndicator initialization": function () {
var remote = this.remote;
return remote
.execute("return document.getElementById('vi').className;")
.then(function (v) {
assert.equal(v, "d-view-indicator", "Wrong class for ViewIndicator");
})
.execute("return document.getElementById('vi').children.length;")
.then(function (v) {
assert.equal(v, 3, "Wrong number of children in ViewIndicator");
})
.execute("return document.getElementById('vi').children[0].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 0");
assert.include(v, "-d-view-indicator-dot-selected", "Missing class for vi child 0");
})
.execute("return document.getElementById('vi').children[1].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 1");
assert.notInclude(v, "-d-view-indicator-dot-selected", "Extra class for vi child 1");
})
.execute("return document.getElementById('vi').children[2].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 2");
assert.notInclude(v, "-d-view-indicator-dot-selected", "Extra class for vi child 2");
})
;
},

"SwapView swipe gesture (right->left)": function () {
var remote = this.remote;
if (/safari|iphone|selendroid/.test(remote.environmentType.browserName)) {
// SafariDriver doesn't support moveTo, see https://code.google.com/p/selenium/issues/detail?id=4136
console.log("Skipping test: SwapView swipe gesture (right->left) as moveTo not supported on Safari");
return remote.end();
} else {
return remote
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 200, 100);
})
.end()
.pressMouseButton()
.sleep(50)
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 195, 100);
})
.end()
.sleep(50)
.execute("return document.getElementById('sv').className;")
.then(function (v) {
assert.notInclude(v, " -d-swap-view-drag", "Swipe started before drag threshold");
})
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 189, 100);
})
.end()
.sleep(50)
.execute("return document.getElementById('sv').className;")
.then(function (v) {
assert.include(v, " -d-swap-view-drag", "Swipe not started after drag threshold");
})
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 100, 100);
}).end()
.sleep(50)
.execute("return document.getElementById('sv').className;")
.then(function (v) {
assert.include(v, " -d-swap-view-drag", "Missing -d-swap-view-drag class during swipe");
})
.execute("var s = window.getComputedStyle(document.getElementById('sv').children[0]);" +
"return s.webkitTransform || s.transform;")
.then(function (v) {
assert.equal(getTransformX(v), "-100", "Wrong transform during swipe");
})
.execute("var s = window.getComputedStyle(document.getElementById('sv').children[1]);" +
"return s.webkitTransform || s.transform;")
.then(function (v) {
assert.equal(getTransformX(v), "300", "Wrong transform during swipe");
})
.releaseMouseButton()
.sleep(500)
.execute("return document.getElementById('sv').className;").then(function (v) {
assert.notInclude(v, " -d-swap-view-drag", "-d-swap-view-drag class left after swipe");
})
.execute("return document.getElementById('sv').children[0].style.visibility;")
.then(function (v) {
assert.equal(v, "visible", "child 0 should still be visible after swipe 100");
})
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 310, 100);
})
.end()
.pressMouseButton()
.sleep(50)
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 100, 100);
})
.end()
.sleep(50)
.execute("var s = window.getComputedStyle(document.getElementById('sv').children[0]);" +
"return s.webkitTransform || s.transform;")
.then(function (v) {
assert.equal(getTransformX(v), "-208", "Wrong transform during swipe");
})
.execute("var s = window.getComputedStyle(document.getElementById('sv').children[1]);" +
"return s.webkitTransform || s.transform;")
.then(function (v) {
assert.equal(getTransformX(v), "188", "Wrong transform during swipe");
})
.releaseMouseButton()
.sleep(500)
.execute("return document.getElementById('sv').children[0].style.visibility;")
.then(function (v) {
assert.equal(v, "hidden", "child 0 should be hidden after swipe > 200");
})
.execute("return document.getElementById('sv').children[1].style.visibility;")
.then(function (v) {
assert.equal(v, "visible", "child 1 should be visible after swipe > 200");
})
;
}
},

"ViewIndicator update": function () {
var remote = this.remote;
return remote
.execute("return document.getElementById('vi').children[0].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 0");
assert.notInclude(v, "-d-view-indicator-dot-selected", "Extra class for vi child 0");
})
.execute("return document.getElementById('vi').children[1].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 1");
assert.include(v, "-d-view-indicator-dot-selected", "Extra class for vi child 1");
})
.execute("return document.getElementById('vi').children[2].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 2");
assert.notInclude(v, "-d-view-indicator-dot-selected", "Extra class for vi child 2");
})
;
},

"SwapView swipe gesture (left->right)": function () {
var remote = this.remote;
if (/safari|iphone|selendroid/.test(remote.environmentType.browserName)) {
// SafariDriver doesn't support moveTo, see https://code.google.com/p/selenium/issues/detail?id=4136
console.log("Skipping test: SwapView swipe gesture (left->right) as moveTo not supported on Safari");
return remote.end();
} else {
return remote
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 200, 100);
})
.end()
.pressMouseButton()
.sleep(50)
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 205, 100);
})
.end()
.sleep(50)
.execute("return document.getElementById('sv').className;")
.then(function (v) {
assert.notInclude(v, " -d-swap-view-drag", "Swipe started before drag threshold");
})
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 211, 100);
})
.end()
.sleep(50)
.execute("return document.getElementById('sv').className;")
.then(function (v) {
assert.include(v, " -d-swap-view-drag", "Swipe not started after drag threshold");
})
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 300, 100);
}).end()
.sleep(50)
.execute("return document.getElementById('sv').className;")
.then(function (v) {
assert.include(v, " -d-swap-view-drag", "Missing -d-swap-view-drag class during swipe");
})
.execute("var s = window.getComputedStyle(document.getElementById('sv').children[0]);" +
"return s.webkitTransform || s.transform;")
.then(function (v) {
assert.equal(getTransformX(v), "-300", "Wrong transform during swipe");
})
.execute("var s = window.getComputedStyle(document.getElementById('sv').children[1]);" +
"return s.webkitTransform || s.transform;")
.then(function (v) {
assert.equal(getTransformX(v), "100", "Wrong transform during swipe");
})
.releaseMouseButton()
.sleep(500)
.execute("return document.getElementById('sv').className;").then(function (v) {
assert.notInclude(v, " -d-swap-view-drag", "-d-swap-view-drag class left after swipe");
})
.execute("return document.getElementById('sv').children[1].style.visibility;")
.then(function (v) {
assert.equal(v, "visible", "child 1 should still be visible after swipe 100");
})
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 90, 100);
})
.end()
.pressMouseButton()
.sleep(50)
.findById("sv")
.then(function (element) {
return remote.moveMouseTo(element, 300, 100);
})
.end()
.sleep(50)
.execute("var s = window.getComputedStyle(document.getElementById('sv').children[0]);" +
"return s.webkitTransform || s.transform;")
.then(function (v) {
assert.equal(getTransformX(v), "-188", "Wrong transform during swipe");
})
.execute("var s = window.getComputedStyle(document.getElementById('sv').children[1]);" +
"return s.webkitTransform || s.transform;")
.then(function (v) {
assert.equal(getTransformX(v), "208", "Wrong transform during swipe");
})
.releaseMouseButton()
.sleep(500)
.execute("return document.getElementById('sv').children[0].style.visibility;")
.then(function (v) {
assert.equal(v, "visible", "child 0 should be visible after swipe > 200");
})
.execute("return document.getElementById('sv').children[1].style.visibility;")
.then(function (v) {
assert.equal(v, "hidden", "child 1 should be hidden after swipe > 200");
})
;
}
},

"ViewIndicator click": function () {
var remote = this.remote;
if (/safari|iphone|selendroid/.test(remote.environmentType.browserName)) {
// SafariDriver doesn't support moveTo, see https://code.google.com/p/selenium/issues/detail?id=4136
console.log("Skipping test: ViewIndicator click as moveTo not supported on Safari");
return remote.end();
}
return remote
.findById("vi")
.then(function (element) {
return remote.moveMouseTo(element, 220, 5);
})
.end()
.pressMouseButton()
.sleep(50)
.releaseMouseButton()
.sleep(500)
.execute("return document.getElementById('vi').children[0].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 0");
assert.notInclude(v, "-d-view-indicator-dot-selected", "Extra class for vi child 0");
})
.execute("return document.getElementById('vi').children[1].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 1");
assert.notInclude(v, "-d-view-indicator-dot-selected", "Extra class for vi child 1");
})
.execute("return document.getElementById('vi').children[2].className;")
.then(function (v) {
assert.include(v, "-d-view-indicator-dot", "Missing class for vi child 2");
assert.include(v, "-d-view-indicator-dot-selected", "Missing class for vi child 2");
})
;
}
});
});
3 changes: 2 additions & 1 deletion tests/functional/all.js
Expand Up @@ -10,5 +10,6 @@ define([
"./Checkbox",
"./Switch",
"./Button",
"./Combobox"
"./Combobox",
"./SwapView"
]);

0 comments on commit 48fb578

Please sign in to comment.