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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3164>
This commit is contained in:
Florian Müllner 2024-01-20 21:04:05 +01:00 committed by Marge Bot
parent 1fcdc60ca0
commit 151e2faa0f
5 changed files with 55 additions and 1 deletions

View File

@ -201,6 +201,7 @@ build:
paths:
- mutter
- build
- subprojects/jasmine-gjs
test:
stage: test

View File

@ -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,

View File

@ -0,0 +1,7 @@
[wrap-git]
directory=jasmine-gjs
url=https://github.com/ptomato/jasmine-gjs.git
revision=c6aa28b3a3b16a3abb53e32825d83f836a2fed42
[provide]
program_names = jasmine

View File

@ -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',

26
tests/unit/.eslintrc.yml Normal file
View File

@ -0,0 +1,26 @@
---
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
# SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
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