summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/webutil.js2
-rw-r--r--tests/test.webutil.js42
-rw-r--r--vnc_lite.html2
3 files changed, 44 insertions, 2 deletions
diff --git a/app/webutil.js b/app/webutil.js
index ef23fcb..d42b7f2 100644
--- a/app/webutil.js
+++ b/app/webutil.js
@@ -32,7 +32,7 @@ export function initLogging(level) {
export function getQueryVar(name, defVal) {
"use strict";
const re = new RegExp('.*[?&]' + name + '=([^&#]*)'),
- match = ''.concat(document.location.href, " ", window.location.hash).match(re);
+ match = ''.concat(document.location.href, window.location.hash).match(re);
if (typeof defVal === 'undefined') { defVal = null; }
if (match) {
diff --git a/tests/test.webutil.js b/tests/test.webutil.js
index 82a9cc6..6681b3c 100644
--- a/tests/test.webutil.js
+++ b/tests/test.webutil.js
@@ -7,6 +7,48 @@ import * as WebUtil from '../app/webutil.js';
describe('WebUtil', function () {
"use strict";
+ describe('config variables', function () {
+ it('should parse query string variables', function () {
+ // history.pushState() will not cause the browser to attempt loading
+ // the URL, this is exactly what we want here for the tests.
+ history.pushState({}, '', "test?myvar=myval");
+ expect(WebUtil.getConfigVar("myvar")).to.be.equal("myval");
+ });
+ it('should return default value when no query match', function () {
+ history.pushState({}, '', "test?myvar=myval");
+ expect(WebUtil.getConfigVar("other", "def")).to.be.equal("def");
+ });
+ it('should handle no query match and no default value', function () {
+ history.pushState({}, '', "test?myvar=myval");
+ expect(WebUtil.getConfigVar("other")).to.be.equal(null);
+ });
+ it('should parse fragment variables', function () {
+ history.pushState({}, '', "test#myvar=myval");
+ expect(WebUtil.getConfigVar("myvar")).to.be.equal("myval");
+ });
+ it('should return default value when no fragment match', function () {
+ history.pushState({}, '', "test#myvar=myval");
+ expect(WebUtil.getConfigVar("other", "def")).to.be.equal("def");
+ });
+ it('should handle no fragment match and no default value', function () {
+ history.pushState({}, '', "test#myvar=myval");
+ expect(WebUtil.getConfigVar("other")).to.be.equal(null);
+ });
+ it('should handle both query and fragment', function () {
+ history.pushState({}, '', "test?myquery=1#myhash=2");
+ expect(WebUtil.getConfigVar("myquery")).to.be.equal("1");
+ expect(WebUtil.getConfigVar("myhash")).to.be.equal("2");
+ });
+ it('should prioritize fragment if both provide same var', function () {
+ history.pushState({}, '', "test?myvar=1#myvar=2");
+ expect(WebUtil.getConfigVar("myvar")).to.be.equal("2");
+ });
+ });
+
+ describe('cookies', function () {
+ // TODO
+ });
+
describe('settings', function () {
describe('localStorage', function () {
diff --git a/vnc_lite.html b/vnc_lite.html
index 1f6e030..8e2f5cb 100644
--- a/vnc_lite.html
+++ b/vnc_lite.html
@@ -122,7 +122,7 @@
// Note that we use location.href instead of location.search
// because Firefox < 53 has a bug w.r.t location.search
const re = new RegExp('.*[?&]' + name + '=([^&#]*)'),
- match = ''.concat(document.location.href, " ", window.location.hash).match(re);
+ match = ''.concat(document.location.href, window.location.hash).match(re);
if (match) {
// We have to decode the URL since want the cleartext value