From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- .../client/shared/test/unit/test_source-utils.js | 181 +++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 devtools/client/shared/test/unit/test_source-utils.js (limited to 'devtools/client/shared/test/unit/test_source-utils.js') diff --git a/devtools/client/shared/test/unit/test_source-utils.js b/devtools/client/shared/test/unit/test_source-utils.js new file mode 100644 index 000000000..2ff55b92e --- /dev/null +++ b/devtools/client/shared/test/unit/test_source-utils.js @@ -0,0 +1,181 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Tests utility functions contained in `source-utils.js` + */ + +const { require } = Components.utils.import("resource://devtools/shared/Loader.jsm", {}); +const sourceUtils = require("devtools/client/shared/source-utils"); + +function run_test() { + run_next_test(); +} + +const CHROME_URLS = [ + "chrome://foo", "resource://baz", "jar:file:///Users/root" +]; + +const CONTENT_URLS = [ + "http://mozilla.org", "https://mozilla.org", "file:///Users/root", "app://fxosapp" +]; + +// Test `sourceUtils.parseURL` +add_task(function* () { + let parsed = sourceUtils.parseURL("https://foo.com:8888/boo/bar.js?q=query"); + equal(parsed.fileName, "bar.js", "parseURL parsed valid fileName"); + equal(parsed.host, "foo.com:8888", "parseURL parsed valid host"); + equal(parsed.hostname, "foo.com", "parseURL parsed valid hostname"); + equal(parsed.port, "8888", "parseURL parsed valid port"); + equal(parsed.href, "https://foo.com:8888/boo/bar.js?q=query", "parseURL parsed valid href"); + + parsed = sourceUtils.parseURL("https://foo.com"); + equal(parsed.host, "foo.com", "parseURL parsed valid host when no port given"); + equal(parsed.hostname, "foo.com", "parseURL parsed valid hostname when no port given"); + + equal(sourceUtils.parseURL("self-hosted"), null, + "parseURL returns `null` for invalid URLs"); +}); + +// Test `sourceUtils.isContentScheme`. +add_task(function* () { + for (let url of CHROME_URLS) { + ok(!sourceUtils.isContentScheme(url), + `${url} correctly identified as not content scheme`); + } + for (let url of CONTENT_URLS) { + ok(sourceUtils.isContentScheme(url), `${url} correctly identified as content scheme`); + } +}); + +// Test `sourceUtils.isChromeScheme`. +add_task(function* () { + for (let url of CHROME_URLS) { + ok(sourceUtils.isChromeScheme(url), `${url} correctly identified as chrome scheme`); + } + for (let url of CONTENT_URLS) { + ok(!sourceUtils.isChromeScheme(url), + `${url} correctly identified as not chrome scheme`); + } +}); + +// Test `sourceUtils.isDataScheme`. +add_task(function* () { + let dataURI = "data:text/html;charset=utf-8,"; + ok(sourceUtils.isDataScheme(dataURI), `${dataURI} correctly identified as data scheme`); + + for (let url of CHROME_URLS) { + ok(!sourceUtils.isDataScheme(url), `${url} correctly identified as not data scheme`); + } + for (let url of CONTENT_URLS) { + ok(!sourceUtils.isDataScheme(url), `${url} correctly identified as not data scheme`); + } +}); + +// Test `sourceUtils.getSourceNames`. +add_task(function* () { + testAbbreviation("http://example.com/foo/bar/baz/boo.js", + "boo.js", + "http://example.com/foo/bar/baz/boo.js", + "example.com"); +}); + +// Test `sourceUtils.isScratchpadTheme` +add_task(function* () { + ok(sourceUtils.isScratchpadScheme("Scratchpad/1"), + "Scratchpad/1 identified as scratchpad"); + ok(sourceUtils.isScratchpadScheme("Scratchpad/20"), + "Scratchpad/20 identified as scratchpad"); + ok(!sourceUtils.isScratchpadScheme("http://www.mozilla.org"), "http://www.mozilla.org not identified as scratchpad"); +}); + +// Test `sourceUtils.getSourceNames`. +add_task(function* () { + // Check length + let longMalformedURL = `example.com${new Array(100).fill("/a").join("")}/file.js`; + ok(sourceUtils.getSourceNames(longMalformedURL).short.length <= 100, + "`short` names are capped at 100 characters"); + + testAbbreviation("self-hosted", "self-hosted", "self-hosted"); + testAbbreviation("", "(unknown)", "(unknown)"); + + // Test shortening data URIs, stripping mime/charset + testAbbreviation("data:text/html;charset=utf-8,", + "data:", + "data:text/html;charset=utf-8,"); + + let longDataURI = `data:image/png;base64,${new Array(100).fill("a").join("")}`; + let longDataURIShort = sourceUtils.getSourceNames(longDataURI).short; + + // Test shortening data URIs and that the `short` result is capped + ok(longDataURIShort.length <= 100, + "`short` names are capped at 100 characters for data URIs"); + equal(longDataURIShort.substr(0, 10), "data:aaaaa", + "truncated data URI short names still have `data:...`"); + + // Test simple URL and cache retrieval by calling the same input multiple times. + let testUrl = "http://example.com/foo/bar/baz/boo.js"; + testAbbreviation(testUrl, "boo.js", testUrl, "example.com"); + testAbbreviation(testUrl, "boo.js", testUrl, "example.com"); + + // Check query and hash and port + testAbbreviation("http://example.com:8888/foo/bar/baz.js?q=query#go", + "baz.js", + "http://example.com:8888/foo/bar/baz.js", + "example.com:8888"); + + // Trailing "/" with nothing beyond host + testAbbreviation("http://example.com/", + "/", + "http://example.com/", + "example.com"); + + // Trailing "/" + testAbbreviation("http://example.com/foo/bar/", + "bar", + "http://example.com/foo/bar/", + "example.com"); + + // Non-extension ending + testAbbreviation("http://example.com/bar", + "bar", + "http://example.com/bar", + "example.com"); + + // Check query + testAbbreviation("http://example.com/foo.js?bar=1&baz=2", + "foo.js", + "http://example.com/foo.js", + "example.com"); + + // Check query with trailing slash + testAbbreviation("http://example.com/foo/?bar=1&baz=2", + "foo", + "http://example.com/foo/", + "example.com"); +}); + +// Test for source mapped file name +add_task(function* () { + const { getSourceMappedFile } = sourceUtils; + const source = "baz.js"; + const output = getSourceMappedFile(source); + equal(output, "baz.js", "correctly formats file name"); + // Test for OSX file path + const source1 = "/foo/bar/baz.js"; + const output1 = getSourceMappedFile(source1); + equal(output1, "baz.js", "correctly formats Linux file path"); + // Test for Windows file path + const source2 = "Z:\\foo\\bar\\baz.js"; + const output2 = getSourceMappedFile(source2); + equal(output2, "baz.js", "correctly formats Windows file path"); +}); + +function testAbbreviation(source, short, long, host) { + let results = sourceUtils.getSourceNames(source); + equal(results.short, short, `${source} has correct "short" name`); + equal(results.long, long, `${source} has correct "long" name`); + equal(results.host, host, `${source} has correct "host" name`); +} -- cgit v1.2.3