| 
1
2
3
4
5
6
7
8
9
1011
12
13
14
15
16
1718
19
20
21
22
23
24
25
26 | 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 | 
+
-
+
+
-
+
+
+
-
+
-
 | 
// JavaScript
"use strict";
if (typeof(require) !== 'undefined') {
var helpers = require("resource://grammalecte/helpers.js");
}
class TestGrammarChecking {consthelpers = require("resource://grammalecte/helpers.js");    constructor (gce) {
constructor (gce, spfTests="") {
        this.gce = gce;
        this.spfTests = spfTests
        this._aRuleTested = new Set();
    };
    * testParse (bDebug=false) {
        const t0 = Date.now();
        let sURL = (this.spfTests !== "") ? this.spfTests : "resource://grammalecte/"+this.gce.lang+"/tests_data.json";        const aData = JSON.parse(helpers.loadFile(const aData = JSON.parse(helpers.loadFile(sURL)).aData;"resource://grammalecte/"+this.gce.lang+"/tests_data.json")).aData;let nInvalid = 0
        let nTotal = 0
        let sErrorText;
        let sSugg;
        let sExpectedErrors;
        let sTextToCheck;
        let sFoundErrors;        //const aData = require("resource://grammalecte/"+this.gce.lang+"/tests_data.js").aData; | 
| 
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 | 
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 | 
-
+
 | 
        }
        catch (e) {
            helpers.logerror(e);
        }
        if (bShowUntested) {
            i = 0;
            for (let [sOpt, sLineId, sRuleId] of gce.listRules()) {
for (let [sOpt, sLineId, sRuleId] of this.gce.listRules()) {
                if (!this._aRuleTested.has(sLineId) && !/^[0-9]+[sp]$|^[pd]_/.test(sRuleId)) {
                    sUntestedRules += sRuleId + ", ";
                    i += 1;
                }
            }
            if (i > 0) {
                yield sUntestedRules + "\n[" + i.toString() + " untested rules]"; | 
| 
120
121
122
123
124
125
126
127
128129
130
131
132
133
134
135
136 | 
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
 | 
-
+
-
+
 | 
        return " ".repeat(sLine.length);
    };
    _getFoundErrors (sLine, bDebug, sOption) {
        try {
            let aErrs = [];
            if (sOption) {
                gce.setOption(sOption, true);
this.gce.setOption(sOption, true);
                aErrs = this.gce.parse(sLine, "FR", bDebug);                gce.setOption(sOption, false);
this.gce.setOption(sOption, false);
            } else {
                aErrs = this.gce.parse(sLine, "FR", bDebug);
            }
            let sRes = " ".repeat(sLine.length);
            let sListErr = "";
            for (let dErr of aErrs) {
                sRes = sRes.slice(0, dErr["nStart"]) + "~".repeat(dErr["nEnd"] - dErr["nStart"]) + sRes.slice(dErr["nEnd"]); |