ecmarkup
Version:
Custom element definitions and core utilities for markup that specifies ECMAScript and related technologies.
47 lines (39 loc) • 1.39 kB
JavaScript
;
const assert = require('assert');
const sectionNums = require('../lib/clauseNums');
describe('clause id generation', function () {
let iter;
beforeEach(function () {
iter = sectionNums.iterator();
});
specify('generating clause ids', function () {
assert.strictEqual(iter.next(0).value, '1');
assert.strictEqual(iter.next(1).value, '1.1');
assert.strictEqual(iter.next(1).value, '1.2');
assert.strictEqual(iter.next(2).value, '1.2.1');
assert.strictEqual(iter.next(0).value, '2');
assert.strictEqual(iter.next(0, true).value, 'A');
assert.strictEqual(iter.next(1, true).value, 'A.1');
assert.strictEqual(iter.next(1, true).value, 'A.2');
assert.strictEqual(iter.next(2, true).value, 'A.2.1');
assert.strictEqual(iter.next(0, true).value, 'B');
});
specify('error thrown for skipping clauses', function () {
assert.throws(function () {
iter.next(2);
}, /Skipped clause/);
});
specify('error thrown for non-annex following annex', function () {
assert.throws(function () {
iter.next(0);
iter.next(0, true);
iter.next(0);
}, /Clauses cannot follow annexes/);
});
specify('error thrown for annex not starting at depth 0', function () {
assert.throws(function () {
iter.next(0);
iter.next(1, true);
}, /First annex must be at depth 0/);
});
});