Пример #1
0
keyboards.forEach(function(keyboard) {
  if(program.keyboards.length == 0 || program.keyboards.indexOf(keyboard.shortname+'/'+keyboard.id) >= 0) {
    code += `
      describe('Test keyboard ${keyboard.id}', () => {
        const shortname='${keyboard.shortname}';
        const id='${keyboard.id}';
        const locator = shortname+'/'+id;
        it('should generate a set of results for "all" possible inputs', function() {
          return windowLoad
            .then(() => testRunner.loadTests(locator))
            .then((shouldRun) => { if(shouldRun) { return testRunner.runTests(id); } })
            .then(() => testRunner.saveTestResults(locator, (testRunner.keyboards[id] || {}).results));
        }).timeout(0);
      });
    `;
  }
});
Пример #2
0
  keyboards.forEach((keyboard) => {
    if(!program.keyboards.length || program.keyboards.indexOf(keyboard.shortname+'/'+keyboard.id) >= 0) {
      // Validate each of the test files against the first tested compiler+engine version

      let localFailCount = 0;
      const localFail = knownFailures.hasOwnProperty([keyboard.id]) ? 
        (msg) => { if(++localFailCount == 1) console.warn(`WARN: Not failing test because ${keyboard.id} is in known-failures.`); console.warn(`WARN: ${msg}`); } : 
        fail;

      try {
        const baseResultFilename = path.join(KEYBOARDS_ROOT, keyboard.shortname, keyboard.id, 'tests', `${keyboard.id}-${baseCompilerVersion}-${baseEngineVersion}.results`);
        const baseResult = fs.readFileSync(baseResultFilename, 'utf8');
        const baseResultJSON = JSON.parse(baseResult);

        const testsFilename = path.join(KEYBOARDS_ROOT, keyboard.shortname, keyboard.id, 'tests', `${keyboard.id}.tests`);
        const testsJSON = JSON.parse(fs.readFileSync(testsFilename, 'utf8'));
        const numTests = Object.keys(testsJSON.inputTests).length;

        // First, check the base result for errors
        for(let k in baseResultJSON) {
          if(typeof baseResultJSON[k] !== 'string') {
            let input = `${testsJSON.inputTests[k].context ? `"${testsJSON.inputTests[k].context}" ` : ""}+ ${keyname(testsJSON.inputTests[k].modifier, testsJSON.inputTests[k].key)}`;
            localFail(`${keyboard.shortname}/${keyboard.id}[${k}]: error in test: ${input}: ${baseResultJSON[k].error}`, 5);
          }
        }

        // Make sure every test is in the base result set
        if(Object.keys(baseResultJSON).length != numTests) {
          localFail(`${keyboard.shortname}/${keyboard.id}: base result set has fewer results (${Object.keys(baseResultJSON).length}) than expected (${numTests})`, 6);
        }

        //console.log(baseResultFilename, baseResult);
        testedCompilerVersions.forEach((cv) => {
          testedEngineVersions.forEach((ev) => {
            const resultFilename = path.join(KEYBOARDS_ROOT, keyboard.shortname, keyboard.id, 'tests', `${keyboard.id}-${cv}-${ev}.results`);
            const result = fs.readFileSync(resultFilename, 'utf8');
            //console.log(resultFilename, result);
            // Naive string test first
            if(result !== baseResult) {
              // Now, report first mismatch and total number of mismatches after parsing JSON
              const resultJSON = JSON.parse(result);
              let errors = 0, prefix = `${keyboard.shortname}/${keyboard.id}`;
              for(let k in baseResultJSON) {
                if(resultJSON[k] !== baseResultJSON[k]) {
                  if(++errors == 1 || program.logAllFailures) {
                    let 
                      ix = k.toString(), 
                      whitespace = ' '.repeat(prefix.length + ix.length + 6),
                      input = `${testsJSON.inputTests[k].context ? `"${testsJSON.inputTests[k].context}" ` : ""}+ ${keyname(testsJSON.inputTests[k].modifier, testsJSON.inputTests[k].key)}`;
                    console.error(`${prefix}[${ix}]: expected: ${input} > "${baseResultJSON[k]}"`);
                    console.error(`${whitespace}actual: ${input} > "${resultJSON[k]}"`);
                  }
                }
              }
              localFail(`${keyboard.shortname}/${keyboard.id} ${errors}/${numTests} test(s) mismatched between (${baseCompilerVersion} / ${baseEngineVersion}) and (${cv} / ${ev})`, 4);
            }
          });
        });
      } catch(e) {
        localFail(`Failed to load test results for ${keyboard.shortname}/${keyboard.id}: ${typeof e == 'object' ? e.message : e}`, 7);
      }
    }
  });