UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

125 lines (107 loc) 3.51 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2010 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. ************************************************************************ */ qx.Class.define("qx.test.dev.StackTrace", { extend: qx.dev.unit.TestCase, members: { tearDown() { qx.dev.StackTrace.FILENAME_TO_CLASSNAME = null; qx.dev.StackTrace.FORMAT_STACKTRACE = null; }, testGetStackTraceFromError() { if (!qx.core.Environment.get("ecmascript.error.stacktrace")) { this.skip("Test skipped since the client doesn't provide stack traces"); } var trace = []; try { throw new Error("Expected exception"); } catch (ex) { trace = qx.dev.StackTrace.getStackTraceFromError(ex); } qx.core.Assert.assertNotEquals( 0, trace.length, "No stack trace information returned!" ); }, testGetStackTraceFromErrorQx() { if (!qx.core.Environment.get("ecmascript.error.stacktrace")) { this.skip("Test skipped since the client doesn't provide stack traces"); } var qxErrorClasses = [ qx.type.BaseError, qx.core.GlobalError, qx.core.WindowError, qx.dev.unit.RequirementError ]; for (var i = 0, l = qxErrorClasses.length; i < l; i++) { var cls = qxErrorClasses[i]; var e; if (cls.toString().indexOf("GlobalError") > 0) { e = new cls(new Error()); } else { e = new cls(); } try { throw e; } catch (ex) { var trace = qx.dev.StackTrace.getStackTraceFromError(ex); this.assertNotIdentical( 0, trace.length, "Didn't get stack trace from " + cls.toString() ); } } }, testFilenameConverterDefault() { var ex = new Error("Just a test"); var stack = qx.dev.StackTrace.getStackTraceFromError(ex); for (var i = 0, l = stack.length; i < l; i++) { this.assertMatch( stack[i], /((?:qx\.)|(?:qxl\.testtapper)|(?:qxl\.testrunner)|(?:testrunner\.js)|(?:tests\.js)|(?:qooxdoo-adapter\.js))/ ); } }, testFilenameConverterCustom() { var converter = function (fileName) { this.assertString(fileName); return "FOO"; }; qx.dev.StackTrace.FILENAME_TO_CLASSNAME = qx.lang.Function.bind( converter, this ); var ex = new Error("Just a test"); var stack = qx.dev.StackTrace.getStackTraceFromError(ex); for (var i = 0, l = stack.length; i < l; i++) { this.assertMatch(stack[i], /FOO/); } }, testFormatStackTrace() { var formatter = function (trace) { this.assertArray(trace); for (var i = 0, l = trace.length; i < l; i++) { trace[i] = "BAR " + trace[i]; } return trace; }; qx.dev.StackTrace.FORMAT_STACKTRACE = qx.lang.Function.bind( formatter, this ); var ex = new Error("Just a test"); var stack = qx.dev.StackTrace.getStackTraceFromError(ex); for (var i = 0, l = stack.length; i < l; i++) { this.assertMatch(stack[i], /^BAR/); } } } });