Skip to content

Commit 2b6bd36

Browse files
committed
Add js unit tests to project.
1 parent bcfefab commit 2b6bd36

File tree

5 files changed

+3468
-81
lines changed

5 files changed

+3468
-81
lines changed

.github/workflows/moodle-plugin-ci.yml

+10-81
Original file line numberDiff line numberDiff line change
@@ -33,87 +33,6 @@ jobs:
3333
- php: '8.1'
3434
moodle-branch: 'MOODLE_405_STABLE'
3535
database: pgsql
36-
- php: '8.2'
37-
moodle-branch: 'MOODLE_405_STABLE'
38-
database: pgsql
39-
- php: '8.3'
40-
moodle-branch: 'MOODLE_405_STABLE'
41-
database: pgsql
42-
- php: '8.1'
43-
moodle-branch: 'MOODLE_405_STABLE'
44-
database: mariadb
45-
- php: '8.2'
46-
moodle-branch: 'MOODLE_405_STABLE'
47-
database: mariadb
48-
- php: '8.3'
49-
moodle-branch: 'MOODLE_405_STABLE'
50-
database: mariadb
51-
- php: '8.1'
52-
moodle-branch: 'MOODLE_404_STABLE'
53-
database: pgsql
54-
- php: '8.2'
55-
moodle-branch: 'MOODLE_404_STABLE'
56-
database: pgsql
57-
- php: '8.3'
58-
moodle-branch: 'MOODLE_404_STABLE'
59-
database: pgsql
60-
- php: '8.1'
61-
moodle-branch: 'MOODLE_404_STABLE'
62-
database: mariadb
63-
- php: '8.2'
64-
moodle-branch: 'MOODLE_404_STABLE'
65-
database: mariadb
66-
- php: '8.3'
67-
moodle-branch: 'MOODLE_404_STABLE'
68-
database: mariadb
69-
- php: '8.0'
70-
moodle-branch: 'MOODLE_403_STABLE'
71-
database: pgsql
72-
- php: '8.1'
73-
moodle-branch: 'MOODLE_403_STABLE'
74-
database: pgsql
75-
- php: '8.2'
76-
moodle-branch: 'MOODLE_403_STABLE'
77-
database: pgsql
78-
- php: '8.0'
79-
moodle-branch: 'MOODLE_403_STABLE'
80-
database: mariadb
81-
- php: '8.1'
82-
moodle-branch: 'MOODLE_403_STABLE'
83-
database: mariadb
84-
- php: '8.2'
85-
moodle-branch: 'MOODLE_403_STABLE'
86-
database: mariadb
87-
- php: '8.0'
88-
moodle-branch: 'MOODLE_402_STABLE'
89-
database: pgsql
90-
- php: '8.1'
91-
moodle-branch: 'MOODLE_402_STABLE'
92-
database: pgsql
93-
- php: '8.2'
94-
moodle-branch: 'MOODLE_402_STABLE'
95-
database: pgsql
96-
- php: '8.0'
97-
moodle-branch: 'MOODLE_402_STABLE'
98-
database: mariadb
99-
- php: '8.1'
100-
moodle-branch: 'MOODLE_402_STABLE'
101-
database: mariadb
102-
- php: '8.2'
103-
moodle-branch: 'MOODLE_402_STABLE'
104-
database: mariadb
105-
- php: '8.0'
106-
moodle-branch: 'MOODLE_401_STABLE'
107-
database: pgsql
108-
- php: '7.4'
109-
moodle-branch: 'MOODLE_401_STABLE'
110-
database: pgsql
111-
- php: '8.0'
112-
moodle-branch: 'MOODLE_401_STABLE'
113-
database: mariadb
114-
- php: '7.4'
115-
moodle-branch: 'MOODLE_401_STABLE'
116-
database: mariadb
11736

11837
steps:
11938
- name: Check out repository code
@@ -145,6 +64,12 @@ jobs:
14564
DB: ${{ matrix.database }}
14665
MOODLE_BRANCH: ${{ matrix.moodle-branch }}
14766

67+
- name: Login to Docker Hub
68+
uses: docker/login-action@v3
69+
with:
70+
username: ${{ secrets.DOCKERHUB_USERNAME }}
71+
password: ${{ secrets.DOCKERHUB_TOKEN }}
72+
14873
- name: PHP Lint
14974
if: ${{ always() }}
15075
run: moodle-plugin-ci phplint
@@ -181,6 +106,10 @@ jobs:
181106
- name: PHPUnit tests
182107
if: ${{ always() }}
183108
run: moodle-plugin-ci phpunit --fail-on-warning
109+
110+
- name: JS tests
111+
if: ${{ always() }}
112+
run: cd /home/runner/work/moodle-tiny_multilang2/moodle-tiny_multilang2/lib/editor/tiny/plugins/multilang2/tests/js && npm install && npm test
184113

185114
- name: Behat features
186115
if: ${{ always() }}

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
.idea/
2+
tests/js/node_modules/
3+
tests/js/src/

tests/js/htmlparser.test.js

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import {expect, test} from '@jest/globals';
2+
import {parseEditorContent} from './src/htmlparser.mjs';
3+
4+
test('html 1', () => {
5+
const html = '<p class="clo">{mlang de}</p><div>Foo bar {mlang}</div>';
6+
const parsed = '<p class="clo"><span contenteditable="false" class="multilang-begin mceNonEditable" '
7+
+ 'data-mce-contenteditable="false" lang="de" xml:lang="de">{mlang de}</span>'
8+
+ '<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span>'
9+
+ '<div>Foo bar <span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" '
10+
+ 'lang="other" xml:lang="other">{mlang other}</span><span contenteditable="false" class="multilang-end mceNonEditable" '
11+
+ 'data-mce-contenteditable="false">{mlang}</span>';
12+
expect(parseEditorContent(html)).toEqual(parsed);
13+
});
14+
15+
test('html 2', () => {
16+
const html = '<div>Foo bar {mlang}</div>';
17+
const parsed = '<div>Foo bar <span contenteditable="false" class="multilang-begin mceNonEditable" '
18+
+ 'data-mce-contenteditable="false" lang="other" xml:lang="other">{mlang other}</span>'
19+
+ '<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span>';
20+
expect(parseEditorContent(html)).toEqual(parsed);
21+
});
22+
23+
test('html 3', () => {
24+
const html = `<p>{mlang en}This is a test{mlang}{mlang de}Das ist ein Test{mlang}.</p>
25+
<p>This is a multilang link: <a
26+
href="https://google.com?lang={mlang de}de-DE{mlang}{mlang en}en-EN{mlang}" target="_blank">{mlang
27+
de}de{mlang}{mlang en}other{mlang}</a></p>
28+
<p>{mlang de}</p>
29+
<p>ein Paragraf auf Deutch</p>
30+
<br><hr strong/>
31+
<p class="clo">{mlang}</p>
32+
<p>{mlang other}This is <b>a</b> test{mlang}{mlang de}Das ist ein Test{mlang}.</p>
33+
<p>{mlang en}This is a test{mlang}{mlang de}Das ist ein Test{mlang}.</p>
34+
<p><span contenteditable="false" class="multilang-begin mceNonEditable"
35+
data-mce-contenteditable="false" lang="en" xml:lang="en">{mlang en}</span>English rules<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span></p>`;
36+
const parsed = `<p><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="en" xml:lang="en">{mlang en}</span>This is a test<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="de" xml:lang="de">{mlang de}</span>Das ist ein Test<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span>.</p>
37+
<p>This is a multilang link: <a
38+
href="https://google.com?lang={mlang de}de-DE{mlang}{mlang en}en-EN{mlang}" target="_blank"><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="de" xml:lang="de">{mlang de}</span>de<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="en" xml:lang="en">{mlang en}</span>other<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span></a></p>
39+
<p><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="de" xml:lang="de">{mlang de}</span><span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span>
40+
<p>ein Paragraf auf Deutch</p>
41+
<br><hr strong/>
42+
<p class="clo"><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="other" xml:lang="other">{mlang other}</span><span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span>
43+
<p><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="other" xml:lang="other">{mlang other}</span>This is <b>a</b> test{mlang}{mlang de}Das ist ein Test{mlang}.<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span>
44+
<p><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="en" xml:lang="en">{mlang en}</span>This is a test<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span><span contenteditable="false" class="multilang-begin mceNonEditable" data-mce-contenteditable="false" lang="de" xml:lang="de">{mlang de}</span>Das ist ein Test<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span>.</p>
45+
<p><span contenteditable="false" class="multilang-begin mceNonEditable"
46+
data-mce-contenteditable="false" lang="en" xml:lang="en">{mlang en}</span>English rules<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span></p>`;
47+
expect(parseEditorContent(html)).toEqual(parsed);
48+
});
49+
test('html 4', () => {
50+
const html = `<p><span contenteditable="false" class="multilang-begin mceNonEditable"
51+
data-mce-contenteditable="false" lang="en" xml:lang="en">{mlang en}</span>English rules<span contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span></p>`;
52+
const parsed = '<p><span contenteditable="false" class="multilang-begin mceNonEditable"\n'
53+
+ 'data-mce-contenteditable="false" lang="en" xml:lang="en">{mlang en}</span>English rules<span '
54+
+ 'contenteditable="false" class="multilang-end mceNonEditable" data-mce-contenteditable="false">{mlang}</span></p>';
55+
expect(parseEditorContent(html)).toEqual(parsed);
56+
});

0 commit comments

Comments
 (0)