From 151e2faa0f8a53bce1b98722a092c1c497c6fbf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 20 Jan 2024 21:04:05 +0100 Subject: [PATCH] build: Set up jasmine for unit testing Jasmine[0] is a popular testing framework for javascript, which gjs itself has used in a heavily customized form for its own unit tests for years. It's far superior to the very rudimentary `jsUnit` module that is still included with gjs, and the jasmine-gjs project provides a general-purpose wrapper for gjs apps. Set up the necessary build infrastructure to run unit tests through jasmine. That allows for existing unit tests to be ported one-by-one. [0] https://jasmine.github.io/index.html Part-of: --- .gitlab-ci.yml | 1 + meson.build | 2 ++ subprojects/jasmine-gjs.wrap | 7 +++++++ tests/meson.build | 20 +++++++++++++++++++- tests/unit/.eslintrc.yml | 26 ++++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 subprojects/jasmine-gjs.wrap create mode 100644 tests/unit/.eslintrc.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 64c290ee9..810052692 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -201,6 +201,7 @@ build: paths: - mutter - build + - subprojects/jasmine-gjs test: stage: test diff --git a/meson.build b/meson.build index e54e4c8b6..6eea96349 100644 --- a/meson.build +++ b/meson.build @@ -293,6 +293,8 @@ if get_option('tests') common_test_env.set('GSETTINGS_BACKEND', 'memory') common_test_env.set('XDG_CURRENT_DESKTOP', '') + jasmine = find_program('jasmine') + add_test_setup('default', is_default: true, env: common_test_env, diff --git a/subprojects/jasmine-gjs.wrap b/subprojects/jasmine-gjs.wrap new file mode 100644 index 000000000..2f6ad0c8d --- /dev/null +++ b/subprojects/jasmine-gjs.wrap @@ -0,0 +1,7 @@ +[wrap-git] +directory=jasmine-gjs +url=https://github.com/ptomato/jasmine-gjs.git +revision=c6aa28b3a3b16a3abb53e32825d83f836a2fed42 + +[provide] +program_names = jasmine diff --git a/tests/meson.build b/tests/meson.build index 286ad7ab3..0a3d2d7da 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -20,6 +20,24 @@ unit_testenv.append('GI_TYPELIB_PATH', shell_typelib_path, separator: ':') unit_testenv.append('GI_TYPELIB_PATH', st_typelib_path, separator: ':') unit_tests = [ +] + +foreach test : unit_tests + test(test, jasmine, + args: [ + '--module', + '--tap', + '--no-config', + '--interpreter', run_test, + 'unit/@0@.js'.format(test), + ], + suite: 'unit', + env: unit_testenv, + protocol: 'tap', + workdir: meson.current_source_dir()) +endforeach + +legacy_tests = [ 'highlighter', 'injectionManager', 'insertSorted', @@ -31,7 +49,7 @@ unit_tests = [ 'versionCompare', ] -foreach test : unit_tests +foreach test : legacy_tests test(test, run_test, args: 'unit/@0@.js'.format(test), suite: 'unit', diff --git a/tests/unit/.eslintrc.yml b/tests/unit/.eslintrc.yml new file mode 100644 index 000000000..afe0d9c63 --- /dev/null +++ b/tests/unit/.eslintrc.yml @@ -0,0 +1,26 @@ +--- +# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later +# SPDX-FileCopyrightText: 2024 Florian Müllner +rules: + jsdoc/require-jsdoc: 'off' +globals: + jasmine: readonly + afterAll: readonly + afterEach: readonly + beforeAll: readonly + beforeEach: readonly + describe: readonly + expect: readonly + expectAsync: readonly + fail: readonly + fdescribe: readonly + fit: readonly + it: readonly + pending: readonly + setSpecProperty: readonly + setSuiteProperty: readonly + spyOn: readonly + spyOnAllFunctions: readonly + spyOnProperty: readonly + xdescribe: readonly + xit: readonly