Befor generating
This commit is contained in:
+104
@@ -0,0 +1,104 @@
|
||||
import * as YAML from '../src/'
|
||||
import { AbstractVisitor } from './visitor'
|
||||
|
||||
import * as chai from 'chai'
|
||||
const assert = chai.assert
|
||||
|
||||
function structure(node) {
|
||||
return new DuplicateStructureBuilder().accept(node);
|
||||
}
|
||||
|
||||
suite('Loading a single document', () => {
|
||||
test('should work with document-end delimiters', function () {
|
||||
const input = `---
|
||||
whatever: true
|
||||
...`
|
||||
const doc = YAML.safeLoad(input)
|
||||
const expected_structure =
|
||||
YAML.newMap(
|
||||
[YAML.newMapping(
|
||||
YAML.newScalar('whatever'),
|
||||
YAML.newScalar('true'))]);
|
||||
|
||||
assert.deepEqual(structure(doc), expected_structure)
|
||||
|
||||
assert.lengthOf(doc.errors, 0,
|
||||
`Found error(s): ${doc.errors.toString()} when expecting none.`)
|
||||
});
|
||||
|
||||
test('Document end position should be equal to input length', function () {
|
||||
const input = `
|
||||
outer:
|
||||
inner:
|
||||
`;
|
||||
const doc1 = YAML.load(input);
|
||||
assert.deepEqual(doc1.endPosition,input.length);
|
||||
});
|
||||
});
|
||||
|
||||
suite('Loading multiple documents', () => {
|
||||
test('should work with document-end delimiters', function () {
|
||||
const docs = []
|
||||
YAML.loadAll(`---
|
||||
whatever: true
|
||||
...
|
||||
---
|
||||
whatever: false
|
||||
...`, d => docs.push(d))
|
||||
|
||||
const expected_structure = [
|
||||
YAML.newMap(
|
||||
[YAML.newMapping(
|
||||
YAML.newScalar('whatever'),
|
||||
YAML.newScalar('true'))]),
|
||||
YAML.newMap(
|
||||
[YAML.newMapping(
|
||||
YAML.newScalar('whatever'),
|
||||
YAML.newScalar('false'))])
|
||||
];
|
||||
|
||||
assert.deepEqual(docs.map(d => structure(d)), expected_structure)
|
||||
|
||||
docs.forEach(doc =>
|
||||
assert.lengthOf(doc.errors, 0,
|
||||
`Found error(s): ${doc.errors.toString()} when expecting none.`))
|
||||
});
|
||||
|
||||
test('Last document end position should be equal to input length', function () {
|
||||
const input = `
|
||||
outer1:
|
||||
inner1:
|
||||
...
|
||||
---
|
||||
outer2:
|
||||
inner2:
|
||||
`;
|
||||
const documents: YAML.YAMLDocument[] = [];
|
||||
YAML.loadAll(input,x=>documents.push(x));
|
||||
const doc2 = documents[1];
|
||||
assert.deepEqual(doc2.endPosition,input.length);
|
||||
});
|
||||
});
|
||||
|
||||
class DuplicateStructureBuilder extends AbstractVisitor {
|
||||
visitScalar(node: YAML.YAMLScalar) {
|
||||
return YAML.newScalar(node.value)
|
||||
}
|
||||
visitMapping(node: YAML.YAMLMapping) {
|
||||
return YAML.newMapping(this.visitScalar(node.key), this.accept(node.value))
|
||||
}
|
||||
visitSequence(node: YAML.YAMLSequence) {
|
||||
const seq = YAML.newSeq()
|
||||
seq.items = node.items.map(n => this.accept(n))
|
||||
return seq
|
||||
}
|
||||
visitMap(node: YAML.YamlMap) {
|
||||
return YAML.newMap(node.mappings.map(n => this.accept(n)));
|
||||
}
|
||||
visitAnchorRef(node: YAML.YAMLAnchorReference) {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
visitIncludeRef(node: YAML.YAMLNode) {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user