aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/jest/extract_callback.test.js121
-rw-r--r--tests/jest/parse_options.test.js59
2 files changed, 180 insertions, 0 deletions
diff --git a/tests/jest/extract_callback.test.js b/tests/jest/extract_callback.test.js
new file mode 100644
index 0000000..d67d7e6
--- /dev/null
+++ b/tests/jest/extract_callback.test.js
@@ -0,0 +1,121 @@
+/**
+ * @jest-environment jsdom
+ */
+
+import extractCallback from "../../resources/assets/javascripts/lib/extract_callback";
+
+describe('extract_callback()', () => {
+ test('simple', () => {
+ const callback = jest.fn();
+ const extracted = extractCallback('callback', [], {
+ callback
+ });
+
+ expect(typeof extracted).toBe('function');
+
+ extracted();
+
+ expect(callback).toHaveBeenCalled();
+ })
+
+ test('simple with payload', () => {
+ const callback = jest.fn();
+ const extracted = extractCallback('callback', ['foo', 23], {
+ callback
+ });
+
+ expect(typeof extracted).toBe('function');
+
+ extracted();
+
+ expect(callback).toHaveBeenCalledWith(['foo', 23]);
+ })
+
+ test('nested', () => {
+ const callback = jest.fn();
+ const extracted = extractCallback('foo.bar.baz.callback', {}, {
+ foo: {
+ bar: {
+ baz: {
+ callback
+ }
+ }
+ }
+ });
+
+ expect(typeof extracted).toBe('function');
+
+ extracted();
+
+ expect(callback).toHaveBeenCalled();
+ })
+
+ test('nested with payload', () => {
+ const callback = jest.fn();
+ const extracted = extractCallback('foo.bar.baz.callback', ['foo', 23], {
+ foo: {
+ bar: {
+ baz: {
+ callback
+ }
+ }
+ }
+ });
+
+ expect(typeof extracted).toBe('function');
+
+ extracted();
+
+ expect(callback).toHaveBeenCalledWith(['foo', 23]);
+ })
+
+ test('complex', () => {
+ const callback = jest.fn();
+ const extracted = extractCallback('foo(42.23).callback', [], {
+ foo () {
+ return {callback};
+ }
+ });
+
+ expect(typeof extracted).toBe('function');
+
+ extracted();
+
+ expect(callback).toHaveBeenCalled();
+ });
+
+ test('parameters', () => {
+ const callback = jest.fn();
+ const extracted = extractCallback('callback("foo", 23)', [], {
+ callback
+ });
+
+ expect(typeof extracted).toBe('function');
+
+ extracted();
+
+ expect(callback).toHaveBeenCalledWith('foo', 23);
+ });
+
+ test('json with payload', () => {
+ const callback = jest.fn();
+ const extracted = extractCallback('{"func":"callback","payload":["foo",23]}', [], {callback});
+
+ expect(typeof extracted).toBe('function');
+
+ extracted();
+
+ expect(callback).toHaveBeenCalledWith(['foo', 23]);
+ })
+
+
+ test('invalid', () => {
+ expect(() => {
+ extractCallback('callback', {}, {});
+ }).toThrow();
+
+ expect(() => {
+ extractCallback('{}', {}, {});
+ }).toThrow();
+ })
+});
diff --git a/tests/jest/parse_options.test.js b/tests/jest/parse_options.test.js
new file mode 100644
index 0000000..5e825ce
--- /dev/null
+++ b/tests/jest/parse_options.test.js
@@ -0,0 +1,59 @@
+import parseOptions from "../../resources/assets/javascripts/lib/parse_options";
+
+describe('parse_options()', () => {
+ test('empty', () => {
+ expect(parseOptions('')).toStrictEqual({});
+ })
+
+ test('boolean', () => {
+ expect(parseOptions('bool')).toStrictEqual({bool: true});
+ expect(parseOptions('bool=false')).toStrictEqual({bool: false});
+ expect(parseOptions('foo;bar=false;baz=true')).toStrictEqual({
+ foo: true,
+ bar: false,
+ baz: true,
+ });
+ })
+
+ test('string', () => {
+ expect(parseOptions('size=auto')).toStrictEqual({size: 'auto'});
+ expect(parseOptions('size="auto"')).toStrictEqual({size: 'auto'});
+ expect(parseOptions('size=auto;close=none')).toStrictEqual({
+ size: 'auto',
+ close: 'none',
+ });
+ })
+
+ test('int', () => {
+ expect(parseOptions('foo=42')).not.toStrictEqual({foo: 42});
+ expect(parseOptions('foo=+42')).toStrictEqual({foo: 42});
+ expect(parseOptions('foo=-42')).toStrictEqual({foo: -42});
+ expect(parseOptions('foo=+42;bar=-23')).toStrictEqual({foo: 42, bar: -23});
+ })
+
+ test('float', () => {
+ expect(parseOptions('foo=42.23')).not.toStrictEqual({foo: 42.23});
+ expect(parseOptions('foo=+42.23')).toStrictEqual({foo: 42.23});
+ expect(parseOptions('foo=-42.23')).toStrictEqual({foo: -42.23});
+ expect(parseOptions('foo=+42.23;bar=-23.42')).toStrictEqual({
+ foo: 42.23,
+ bar: -23.42,
+ });
+ })
+
+ test('mixed', () => {
+ const parsed = parseOptions('size=auto;reload-on-close;foo=+42;bar=-42.23');
+ expect(parsed).toStrictEqual({
+ size: 'auto',
+ 'reload-on-close': true,
+ foo: 42,
+ bar: -42.23,
+ });
+ });
+
+ test('invalid', () => {
+ expect(() => {
+ parseOptions('foo="bar')
+ }).toThrow('Invalid data, missing closing quote')
+ })
+});