Files
pjax/tests/lib/proto/attach-link.js

144 lines
3.9 KiB
JavaScript
Raw Normal View History

2014-05-22 06:20:38 +02:00
var tape = require("tape")
2014-10-14 08:23:56 +02:00
var on = require("../../../lib/events/on")
var trigger = require("../../../lib/events/trigger")
var attachLink = require("../../../lib/proto/attach-link")
2014-05-22 06:20:38 +02:00
var attr = "data-pjax-state"
2014-05-22 06:20:38 +02:00
tape("test attach link prototype method", function(t) {
var a = document.createElement("a")
var loadUrlCalled = false
2014-05-22 06:20:38 +02:00
attachLink.call({
options: {},
loadUrl: function() {
loadUrlCalled = true
2014-05-22 06:20:38 +02:00
}
}, a)
var internalUri = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search
a.href = internalUri
trigger(a, "click", {metaKey: true})
t.equal(a.getAttribute(attr), "modifier", "event key modifier stop behavior")
a.href = "http://external.com/"
trigger(a, "click")
t.equal(a.getAttribute(attr), "external", "external url stop behavior")
window.location.hash = "#anchor"
2014-05-22 06:20:38 +02:00
a.href = internalUri + "#anchor"
trigger(a, "click")
t.equal(a.getAttribute(attr), "anchor", "internal anchor stop behavior")
2014-05-22 06:20:38 +02:00
a.href = internalUri + "#another-anchor"
trigger(a, "click")
t.equal(a.getAttribute(attr), "anchor", "different anchors stop behavior")
2014-05-22 06:20:38 +02:00
window.location.hash = ""
a.href = internalUri + "#"
trigger(a, "click")
t.equal(a.getAttribute(attr), "anchor-empty", "empty anchor stop behavior")
a.href = window.location.protocol + "//" + window.location.host + "/internal"
trigger(a, "click")
t.equals(a.getAttribute(attr), "load", "triggering an internal link sets the state attribute to 'load'")
t.equals(loadUrlCalled, true, "triggering an internal link actually loads the page")
2014-05-22 06:20:38 +02:00
t.end()
})
2016-01-04 23:45:25 +11:00
tape("test attach link preventDefaulted events", function(t) {
var loadUrlCalled = false
2016-01-04 23:45:25 +11:00
var a = document.createElement("a")
// This needs to be before the call to attachLink()
on(a, "click", function(event) {
event.preventDefault()
})
2016-01-04 23:45:25 +11:00
attachLink.call({
options: {},
loadUrl: function() {
loadUrlCalled = true
2016-01-04 23:45:25 +11:00
}
}, a)
a.href = "#"
trigger(a, "click")
t.equal(loadUrlCalled, false, "events that are preventDefaulted should not fire callback")
2016-01-04 23:45:25 +11:00
t.end()
})
tape("test options are not modified by attachLink", function(t) {
var a = document.createElement("a")
var options = {foo: "bar"}
var loadUrl = function() {}
attachLink.call({options: options, loadUrl: loadUrl}, a)
a.href = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search
trigger(a, "click")
t.equal(1, Object.keys(options).length, "options object that is passed in should not be modified")
t.equal("bar", options.foo, "options object that is passed in should not be modified")
t.end()
})
tape("test link triggered by keyboard", function(t) {
var a = document.createElement("a")
var pjax = {
options: {},
loadUrl: function() {
t.equal(a.getAttribute(attr), "load", "triggering a internal link actually loads the page")
}
}
t.plan(3)
attachLink.call(pjax, a)
a.href = window.location.protocol + "//" + window.location.host + "/internal"
trigger(a, "keyup", {keyCode: 14})
t.equal(a.getAttribute(attr), "", "keycode other than 13 doesn't trigger anything")
trigger(a, "keyup", {keyCode: 13, metaKey: true})
t.equal(a.getAttribute(attr), "modifier", "event key modifier stop behavior")
trigger(a, "keyup", {keyCode: 13})
// see loadUrl defined above
t.end()
})
tape("test link with the same URL as the current one, when currentUrlFullReload set to true", function(t) {
var a = document.createElement("a")
var pjax = {
options: {
currentUrlFullReload: true
},
reload: function() {
t.pass("this.reload() was called correctly")
},
loadUrl: function() {
t.fail("loadUrl() was called wrongly")
}
}
t.plan(2)
attachLink.call(pjax, a)
a.href = window.location.href
trigger(a, "click")
t.equal(a.getAttribute(attr), "reload", "reload stop behavior")
t.end()
})