buttplug 0.2.0

Buttplug Intimate Hardware Control Library
Documentation
const ajv = require("ajv");
const fs = require('fs').promises;
const assert = require('assert');

async function test() {
  const tests = JSON.parse(await fs.readFile("./tests/schema-test.json", "utf-8"));
  const schema = JSON.parse(await fs.readFile("./schema/buttplug-schema.json", "utf-8"));
  const validator = new ajv();
  validator.addMetaSchema(require("ajv/lib/refs/json-schema-draft-06.json"));
  const jsonValidator = validator.compile(schema);
  for (const test of tests) {
    console.log("Running " + test["Description"]);
    for (const testName of test["Tests"]) {
      if (testName === "ShouldPassParse") {
        assert(jsonValidator(test["Messages"]), jsonValidator.errors ? jsonValidator.errors.map((error) => error.message).join("; ") : "No errors");
      }
      else if (testName === "ShouldFailParse") {
        assert(!jsonValidator(test["Messages"]), `Test ${test["Description"]} passed parsing when it should have failed`);
      }
      else if (testName === "ShouldFailOnExtraField") {
        let obj = {... test["Message"]};
        obj["ExtraField"] = "I'm a useless extra field";
        assert(!jsonValidator(obj), `Test ${test["Description"]} passed with extra field when it should have failed`);
      } else {
        assert(false, `Test name ${testName} not valid`);
      }
    }
  }
}

test().then(() => { console.log("Done"); }).catch((err) => { console.log(`failure: ${err}`); });