UNPKG

expexp

Version:

The express model io and express model and data representation.

183 lines (153 loc) 4.7 kB
import ist from 'ist' import {ModelDeserializer} from '../dist/index.cjs' // import {traverseContent} from '../src/tree.js' import fs from 'fs' import { loadScenarioCases, genScenarioCase, loadScenario, loadXpl, stringify } from './helper.js' function applyScenario(ci, json) { const isScmIdToScm = {} for (let i=0; i<json.xpls.length; i++) { const inputStr = loadXpl(json.xpls[i]) // console.log(inputStr) const psr = ModelDeserializer() const isScmJson = psr.syntaxJsonFromString(inputStr) isScmIdToScm[isScmJson.id] = isScmJson // console.log(isScmJson) // const outputStr = JSON.stringify(isScmJson, undefined, 2) // const outputStr = JSON.stringify(scnJson, undefined, 2) // fs.writeFileSync('../whole.json', outputStr) // return // TODO } // TODO here start the test impls. for (const shdScm of json.jsons) { const isScm = isScmIdToScm[shdScm.id] const isScmStr = stringify(isScm) const shdScmStr = stringify(shdScm) ist(isScmStr, shdScmStr) } } function applyScenarioOld(name, inputStr, scnJson) { const jsonStr = fs.readFileSync(fullFileName, 'utf8') inputStr = resolveXplIncludes(inputStr) const psr = ModelDeserializer() const isScmJson = psr.syntaxJsonFromString(inputStr) // console.log(isScmJson) resolveScenarioJsonIncludes(scnJson) // TODO handle scn last to first in list. const outputStr = JSON.stringify(isScmJson, undefined, 2) // const outputStr = JSON.stringify(scnJson, undefined, 2) fs.writeFileSync('../whole.json', outputStr) return // TODO // console.log('raw', name, isScmJson) const id2Ctt = {} for (const elt of isScmJson.scts) { id2Ctt[elt.id] = elt } for (const elt of isScmJson.consts) { id2Ctt[elt.id.id] = elt // .id.id ! } // TODO how to test validation errors if (scnJson.constants) { // TODO remove as soon as all test data conforms for (let shd of scnJson.constants) { const has = !!id2Ctt[shd.id.id] // .id.id ! ist(has) if (has) { const is = id2Ctt[shd.id.id] // .id.id ! const isStr = stringify(is) const shouldStr = stringify(shd) ist(isStr, shouldStr) id2Ctt[shd.id.id] = false // .id.id ! } } } for (let shd of scnJson.types) { const has = !!id2Ctt[shd.id] ist(has) if (has) { const is = id2Ctt[shd.id] const isStr = stringify(is) const shouldStr = stringify(shd) ist(isStr, shouldStr) id2Ctt[shd.id] = false } } for (let shd of scnJson.entities) { const has = !!id2Ctt[shd.id] ist(has) if (has) { const is = id2Ctt[shd.id] const isStr = stringify(is) const shouldStr = stringify(shd) ist(isStr, shouldStr) id2Ctt[shd.id] = false } } for (let shd of scnJson.subtypeConstraints) { const has = !!id2Ctt[shd.id] ist(has) if (has) { const is = id2Ctt[shd.id] const isStr = stringify(is) const shouldStr = stringify(shd) ist(isStr, shouldStr) id2Ctt[shd.id] = false } } for (let shd of scnJson.functions) { const has = !!id2Ctt[shd.id] ist(has) if (has) { const is = id2Ctt[shd.id] const isStr = stringify(is) const shouldStr = stringify(shd) ist(isStr, shouldStr) id2Ctt[shd.id] = false } } // TODO procs for (const is of Object.values(id2Ctt)) { if (is) { const id = (is.id.id?is.id.id:is.id) ist('', `The ${is.t} ${id} is not present in the json.`) } } } function applyScenarioCase(ci) { const json = loadScenario(ci) it(`The ${ci.name} scenario is parsed correctly.`, () => { applyScenario(ci, json) }) } function testScenarioCases() { const cis = loadScenarioCases() for (let i = 0; i<cis.length; i++) { const ci = cis[i] applyScenarioCase(ci) } } function testScenario(dirName, caseName) { const ci = genScenarioCase(dirName, caseName) applyScenarioCase(ci) } describe("ModelDeserializer Szenarios", () => { context("The items are parsed correctly. (Parsing info is ignored.)", () => { // testScenario('scenarios', 'geometry') // testScenario('scenarios', 'usersAndRelated') // testScenario('scenarios', 'nameClash') // testScenario('scenarios', 'coursesAsConstraint') // testScenario('scenarios', 'coursesAsEntity') // testScenario('scenarios', 'complexDependencies') // testScenario('scenarios', 'binary') }) context("The scenarios are tested correctly. (Parsing info is ignored.)", () => { testScenarioCases() }) // More future todos: // TODO functions / procedure / rules - locals // TODO negatively test that the remarks example does not contain the // types or entities mentioned in the remark only. // TODO do WHERE tests of TpIntegerGreaterThanZero and TpHhMmSsMx // TODO Test precision_spec for REAL as soon as this is implemented. (Add to NttWithSimpleAttrs.) })