ecmarkup
Version:
Custom element definitions and core utilities for markup that specifies ECMAScript and related technologies.
45 lines (38 loc) • 1.48 kB
JavaScript
var assert = require('assert');
var sectionNums = require('../lib/clauseNums')
describe('clause id generation', function() {
var 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/)
});
});