canyin-project/ybcy/vendor/bower-asset/yii2-pjax/test/unit/pjax_fallback.js
2024-11-01 16:07:54 +08:00

462 lines
9.6 KiB
JavaScript

// $.pjax fallback tests should run on both pushState and
// non-pushState compatible browsers.
$.each([true, false], function() {
var disabled = this == false
var s = disabled ? " (disabled)" : ""
var ua = navigator.userAgent
var safari = ua.match("Safari") && !ua.match("Chrome") && !ua.match("Edge")
var chrome = ua.match("Chrome") && !ua.match("Edge")
module("$.pjax fallback"+s, {
setup: function() {
var self = this
stop()
this.loaded = function(frame) {
self.frame = frame
self.loaded = $.noop
start()
}
window.iframeLoad = function(frame) {
setTimeout(function() {
if (disabled && frame.$ && frame.$.pjax) frame.$.pjax.disable()
self.loaded(frame)
}, 0)
}
$("#qunit-fixture").append("<iframe src='home.html'>")
},
teardown: function() {
delete window.iframeLoad
}
})
asyncTest("sets new url"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/hello.html")
start()
}
frame.$.pjax({
url: "hello.html",
container: "#main"
})
})
asyncTest("sets new url for function"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/hello.html")
start()
}
frame.$.pjax({
url: function() { return "hello.html" },
container: "#main"
})
})
asyncTest("updates container html"+s, function() {
var frame = this.frame
this.loaded = function(frame) {
equal(frame.$("#main p").html(), "Hello!")
start()
}
frame.$.pjax({
url: "/hello.html",
container: "#main"
})
})
asyncTest("sets title to response <title>"+s, function() {
var frame = this.frame
this.loaded = function(frame) {
equal(frame.document.title, "Hello")
start()
}
frame.$.pjax({
url: "/hello.html",
container: "#main"
})
})
asyncTest("sends correct HTTP referer"+s, function() {
var frame = this.frame
this.loaded = function(frame) {
var referer = frame.document.getElementById("referer").textContent
ok(referer.match("/home.html"), referer)
start()
}
frame.$.pjax({
url: "/referer.html",
container: "#main"
})
})
asyncTest("scrolls to top of the page"+s, function() {
var frame = this.frame
frame.window.scrollTo(0, 100)
equal(frame.window.pageYOffset, 100)
this.loaded = function(frame) {
equal(frame.window.pageYOffset, 0)
start()
}
frame.$.pjax({
url: "/long.html",
container: "#main"
})
})
asyncTest("scrolls to anchor at top page"+s, function() {
var frame = this.frame
equal(frame.window.pageYOffset, 0)
this.loaded = function(frame) {
setTimeout(function() {
equal(frame.location.pathname, "/anchor.html")
equal(frame.location.hash, "#top")
equal(frame.window.pageYOffset, 8)
start()
}, 100)
}
frame.$.pjax({
url: "/anchor.html#top",
container: "#main"
})
if (disabled) {
equal(frame.location.pathname, "/home.html")
equal(frame.location.href.indexOf("#"), -1)
} else {
equal(frame.location.pathname, "/anchor.html")
equal(frame.location.hash, "#top")
}
})
asyncTest("empty anchor doesn't scroll page"+s, function() {
var frame = this.frame
equal(frame.window.pageYOffset, 0)
this.loaded = function(frame) {
setTimeout(function() {
equal(frame.window.pageYOffset, 0)
start()
}, 10)
}
frame.$.pjax({
url: "/anchor.html#",
container: "#main"
})
})
asyncTest("scrolls to anchor at bottom page"+s, function() {
var frame = this.frame
equal(frame.window.pageYOffset, 0)
this.loaded = function(frame) {
setTimeout(function() {
equal(frame.window.pageYOffset, 10008)
start()
}, 10)
}
frame.$.pjax({
url: "/anchor.html#bottom",
container: "#main"
})
})
asyncTest("scrolls to named encoded anchor"+s, function() {
var frame = this.frame
equal(frame.window.pageYOffset, 0)
this.loaded = function(frame) {
setTimeout(function() {
equal(frame.window.pageYOffset, 10008)
start()
}, 10)
}
frame.$.pjax({
url: "/anchor.html#%62%6F%74%74%6F%6D",
container: "#main"
})
})
asyncTest("sets GET method"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "GET")
start()
}
frame.$.pjax({
type: 'GET',
url: "env.html",
container: "#main"
})
})
asyncTest("sets POST method"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "POST")
start()
}
frame.$.pjax({
type: 'POST',
url: "env.html",
container: "#main"
})
})
asyncTest("sets PUT method"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "PUT")
start()
}
frame.$.pjax({
type: 'PUT',
url: "env.html",
container: "#main"
})
})
asyncTest("sets DELETE method"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "DELETE")
start()
}
frame.$.pjax({
type: 'DELETE',
url: "env.html",
container: "#main"
})
})
asyncTest("GET with data object"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
equal(frame.location.search, "?foo=bar")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "GET")
equal(env['rack.request.query_hash']['foo'], 'bar')
start()
}
frame.$.pjax({
type: 'GET',
url: "env.html",
data: {foo: 'bar'},
container: "#main"
})
})
asyncTest("POST with data object"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
equal(frame.location.search, "")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "POST")
equal(env['rack.request.form_hash']['foo'], 'bar')
start()
}
frame.$.pjax({
type: 'POST',
url: "env.html",
data: {foo: 'bar'},
container: "#main"
})
})
asyncTest("GET with data array"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
equal(frame.location.search, "?foo%5B%5D=bar&foo%5B%5D=baz")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "GET")
var expected = {'foo': ['bar', 'baz']}
if (!disabled) expected._pjax = "#main"
deepEqual(env['rack.request.query_hash'], expected)
start()
}
frame.$.pjax({
type: 'GET',
url: "env.html",
data: [{name: "foo[]", value: "bar"}, {name: "foo[]", value: "baz"}],
container: "#main"
})
})
asyncTest("POST with data array"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
equal(frame.location.search, "")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "POST")
var expected = {'foo': ['bar', 'baz']}
if (!disabled) expected._pjax = "#main"
deepEqual(env['rack.request.form_hash'], expected)
start()
}
frame.$.pjax({
type: 'POST',
url: "env.html",
data: [{name: "foo[]", value: "bar"}, {name: "foo[]", value: "baz"}],
container: "#main"
})
})
asyncTest("GET with data string"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
equal(frame.location.search, "?foo=bar")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "GET")
equal(env['rack.request.query_hash']['foo'], 'bar')
start()
}
frame.$.pjax({
type: 'GET',
url: "env.html",
data: "foo=bar",
container: "#main"
})
})
asyncTest("POST with data string"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/env.html")
equal(frame.location.search, "")
var env = JSON.parse(frame.$("#env").text())
equal(env['REQUEST_METHOD'], "POST")
equal(env['rack.request.form_hash']['foo'], 'bar')
start()
}
frame.$.pjax({
type: 'POST',
url: "env.html",
data: "foo=bar",
container: "#main"
})
})
asyncTest("handle form submit"+s, function() {
var frame = this.frame
frame.$(frame.document).on("submit", "form", function(event) {
frame.$.pjax.submit(event, "#main")
})
this.loaded = function() {
var env = JSON.parse(frame.$("#env").text())
var expected = {foo: "1", bar: "2"}
if (!disabled) expected._pjax = "#main"
deepEqual(env['rack.request.query_hash'], expected)
start()
}
frame.$("form").submit()
})
asyncTest("browser URL is correct after redirect"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/hello.html")
var expectedHash = safari && disabled ? "" : "#new"
equal(frame.location.hash, expectedHash)
start()
}
frame.$.pjax({
url: "redirect.html#new",
container: "#main"
})
})
asyncTest("server can't affect anchor after redirect"+s, function() {
var frame = this.frame
this.loaded = function() {
equal(frame.location.pathname, "/hello.html")
var expectedHash = safari && disabled ? "" : "#new"
equal(frame.location.hash, expectedHash)
start()
}
frame.$.pjax({
url: "redirect.html?anchor=server#new",
container: "#main"
})
})
})