UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

185 lines (155 loc) 5.08 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2012 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Martin Wittemann (wittemann) ************************************************************************ */ qx.Class.define("qx.test.application.Routing", { extend: qx.dev.unit.TestCase, include: qx.dev.unit.MMock, members: { __r: null, __initialState: null, setUp() { this.__initialState = qx.bom.History.getInstance().getState(); this.__r = new qx.application.Routing(); }, tearDown() { qx.bom.History.getInstance().setState(this.__initialState); this.__r.dispose(); }, testGet() { var handler = this.spy(); this.__r.onGet("/abc", handler); this.__r.executeGet("/abc"); this.assertCalledOnce(handler); }, testBack() { var aHandler = this.spy(); var bHandler = this.spy(); this.__r.onGet("/a", aHandler); this.__r.onGet("/b", bHandler); this.__r.executeGet("/a"); this.__r.executeGet("/b"); this.__r.back(); this.assertCalledTwice(aHandler); this.assertCalledOnce(bHandler); }, /** * Tests the ability of app routing to detect and remove route cycles. * After A >> B >> C >> B >> routing.back(), the routing should display A and not C. */ testBackCycle() { var aHandler = this.spy(); var bHandler = this.spy(); var cHandler = this.spy(); this.__r.onGet("/a", aHandler); this.__r.onGet("/b", bHandler); this.__r.onGet("/c", cHandler); this.__r.executeGet("/a"); this.__r.executeGet("/b"); this.__r.executeGet("/c"); this.__r.executeGet("/b"); this.__r.back(); this.assertCalledTwice(aHandler); this.assertCalledTwice(bHandler); this.assertCalledOnce(cHandler); }, testGetCustomData() { var handler = this.spy(); this.__r.onGet("/abc", handler); this.__r.executeGet("/abc", { a: true }); this.assertCalledOnce(handler); this.assertTrue(handler.args[0][0].customData.a); }, testGetCustomDataTwoInstances() { var r2 = new qx.application.Routing(); var handler = this.spy(); this.__r.onGet("/abc", handler); r2.executeGet("/abc", { a: true }); this.assertCalledOnce(handler); this.assertTrue(handler.args[0][0].customData.a); r2.dispose(); }, testOn() { var handler = this.spy(); this.__r.on("/", handler); this.__r.execute("/"); this.assertCalledOnce(handler); }, testPost() { var handler = this.spy(); this.__r.onPost("/abc", handler); this.__r.executePost("/abc"); this.assertCalledOnce(handler); }, testPostParam() { var handler = this.spy(); var data = { data: "test" }; this.__r.onPost("/{id}/affe", handler); this.__r.executePost("/123456/affe", data, "custom data"); this.assertCalledOnce(handler); this.assertCalledWith(handler, { customData: "custom data", params: { id: "123456", data: "test" }, path: "/123456/affe" }); }, testDelete() { var handler = this.spy(); this.__r.onDelete("/abc", handler); this.__r.executeDelete("/abc"); this.assertCalledOnce(handler); }, testPut() { var handler = this.spy(); this.__r.onPut("/abc", handler); this.__r.executePut("/abc"); this.assertCalledOnce(handler); }, testAny() { var handler = this.spy(); this.__r.onAny("/abc", handler); this.__r.executePost("/abc"); this.__r.executeDelete("/abc"); this.assertCalledTwice(handler); }, testInit() { var handler = this.spy(); var defaultHandler = this.spy(); this.__r.dispose(); this.__r = new qx.application.Routing(); this.__r.onGet("/a/b/c", handler); this.assertNotCalled(handler); this.__r.onGet("/", defaultHandler); this.assertNotCalled(defaultHandler); this.__r.init(); this.assertNotCalled(handler); this.assertCalledOnce(defaultHandler); qx.bom.History.getInstance().setState("/a/b/c"); this.assertCalledOnce(handler); }, testGetPathOrFallback() { this.__r.on("/registered", function () {}); this.assertEquals("/", this.__r._getPathOrFallback("")); this.assertEquals("/", this.__r._getPathOrFallback(null)); this.assertEquals("/", this.__r._getPathOrFallback("/not/registered")); this.assertEquals( "/given/default", this.__r._getPathOrFallback( "use_default_instead_of_this", "/given/default" ) ); this.assertEquals( "/registered", this.__r._getPathOrFallback("/registered") ); } } });