summaryrefslogtreecommitdiff
path: root/misc/openlayers/tests/throws.js
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/tests/throws.js')
-rw-r--r--misc/openlayers/tests/throws.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/misc/openlayers/tests/throws.js b/misc/openlayers/tests/throws.js
new file mode 100644
index 0000000..0e2ac9a
--- /dev/null
+++ b/misc/openlayers/tests/throws.js
@@ -0,0 +1,82 @@
+/*
+
+ throws.js -- Adds a `throws_` method to AnotherWay test objects.
+
+ Copyright 2005 OpenLayers Contributors. released under the BSD License.
+
+
+ A reference to this file needs to be added to `run-tests.html` in the
+ head element after the AnotherWay classes are created:
+
+ <script type="text/javascript" src="throws.js"></script>
+
+ Then, it can be used just like the `ok`, `fail` and other such methods
+ in your unit tests.
+
+ e.g.
+
+ t.throws_(function () {new OpenLayers.View.Map.Dynamic();},
+ ReferenceError("No container supplied."),
+ "OpenLayers.View.Map.Dynamic instantiation with no container "
+ + "must throw.");
+
+ This was inspired by the `assertRaises` method of Python's unittest
+ library.
+
+ Possible future enhancements:
+
+ * Contribute to official AnotherWay distribution.
+ * Use `apply` rather than require a inner function (or as an option).
+ * Preserve the stack fields.
+
+ */
+
+Test.AnotherWay._test_object_t.prototype.throws_ =
+function (fn, expectedException, doc) {
+ /*
+
+ Executes the supplied function object catching any exception(s)
+ thrown, then verifies the supplied expected exception occurred.
+
+ If no exception is thrown the test fails.
+
+ If an exception is thrown and it does not match the supplied
+ expected exception the test fails.
+
+ If the exception thrown matches the supplied expected exception
+ the test passes.
+
+ Two exceptions "match" if Test.AnotherWay's `eq` method considers
+ the two equal when their respective stacks are ignored.
+
+ fn - The function object to be executed
+ expectedException - The exception object expected to result
+ doc - Description of the test
+
+ Note: The name of this method is `throws_` (with a trailing
+ underscore) as `throws` is a reserved identifier and can
+ not be used as a method name.
+
+ Note: This function does not preserve the stack field associated
+ with either exception.
+
+ */
+ var theCaughtException = null;
+
+ try {
+ fn();
+ } catch (innerCaughtException) {
+ // As `innerCaughtException` is not visible outside the scope
+ // of this `catch` block we need to make it visible explicitly.
+ theCaughtException = innerCaughtException;
+ }
+
+ if (theCaughtException) {
+ // We delete the stacks before comparison as they will never match.
+ delete theCaughtException.stack;
+ delete expectedException.stack;
+ this.eq(theCaughtException, expectedException, doc);
+ } else {
+ this.fail(doc);
+ }
+};