var assert = require("assert"), loaderUtils = require("../"); function ExpectedError(regex) { this.regex = regex; } ExpectedError.prototype.matches = function (err) { return this.regex.test(err.message); }; describe("loader-utils", function() { describe("#urlToRequest()", function() { [ // without root [["path/to/thing"], "./path/to/thing", "should handle implicit relative urls"], [["./path/to/thing"], "./path/to/thing", "should handle explicit relative urls"], [["~path/to/thing"], "path/to/thing", "should handle module urls (with ~)"], [["some/other/stuff/and/then~path/to/thing"], "path/to/thing", "should handle module urls with path prefix"], [["./some/other/stuff/and/then~path/to/thing"], "path/to/thing", "should handle module urls with relative path prefix"], // with root (normal path) [["path/to/thing", "root/dir"], "./path/to/thing", "should do nothing with root if implicit relative url"], [["./path/to/thing", "root/dir"], "./path/to/thing", "should do nothing with root if explicit relative url"], [["/path/to/thing", "root/dir"], "root/dir/path/to/thing", "should include root if root-relative url"], // with root (boolean) [["/path/to/thing", true], "/path/to/thing", "should allow root-relative to exist as-is if root = `true`"], // with root (module) [["/path/to/thing", "~"], "path/to/thing", "should convert to module url if root = ~"], // with root (module path) [["/path/to/thing", "~module"], "module/path/to/thing", "should allow module prefixes when root starts with ~"], [["/path/to/thing", "~module/"], "module/path/to/thing", "should allow module prefixes (with trailing slash) when root starts with ~"], // error cases [["/path/to/thing", 1], new ExpectedError(/unexpected parameters/i), "should throw an error on invalid root"] ].forEach(function(test) { it(test[2], function() { var expected = test[1]; try { var request = loaderUtils.urlToRequest.apply(loaderUtils, test[0]); assert.equal(request, expected); } catch (e) { if (expected instanceof ExpectedError) { assert.ok(expected.matches(e)); } else { assert.ok(false, "should not have thrown an error: " + e.message); } } }); }); }); describe("#parseString", function() { [ ["test string", "test string"], [JSON.stringify("!\"§$%&/()=?'*#+,.-;öäü:_test"), "!\"§$%&/()=?'*#+,.-;öäü:_test"], ["'escaped with single \"'", 'escaped with single "'], ["invalid \"' string", "invalid \"' string"], ["\'inconsistent start and end\"", "\'inconsistent start and end\""] ].forEach(function(test) { it("should parse " + test[0], function() { var parsed = loaderUtils.parseString(test[0]); assert.equal(parsed, test[1]); }); }); }); });