1 /*global require, it, assert, assertEqual, assertNot */
2 /*jshint -W085 */ // "Don't use 'with'."
4 var JS
= this.JS
|| require('jstest');
5 var rrr
= require('../rrr');
7 var AB
= new rrr
.Grammar({
13 var DIGITS
= new rrr
.Grammar({
18 JS
.Test
.describe('rrr AB', function () { with (this) {
19 it("simply expands", function () { with (this) {
20 assertEqual("A", AB
.expand("<A>"));
21 assertEqual("B", AB
.expand("<B>"));
22 assertEqual("A B", AB
.expand("<AB>"));
24 it("expands multiple tokens", function () { with (this) {
25 assertEqual("A B A", AB
.expand("<A> <B> <A>"));
27 it("expands multiple times", function () { with (this) {
28 assertEqual("AAAAA", AB
.expand("<A>{5}"));
30 it("expands random times", function () { with (this) {
32 for (var i
= 0; i
< 1000; ++i
)
33 r
.push(AB
.expand("<A>{1,10}"));
34 assert(r
.indexOf("") < 0);
35 assert(r
.indexOf("A") >= 0);
36 assert(r
.indexOf("AA") >= 0);
37 assert(r
.indexOf("AAA") >= 0);
38 assert(r
.indexOf("AAAA") >= 0);
39 assert(r
.indexOf("AAAAA") >= 0);
40 assert(r
.indexOf("AAAAAA") >= 0);
41 assert(r
.indexOf("AAAAAAA") >= 0);
42 assert(r
.indexOf("AAAAAAAA") >= 0);
43 assert(r
.indexOf("AAAAAAAAA") >= 0);
44 assert(r
.indexOf("AAAAAAAAAA") >= 0);
45 assert(r
.indexOf("AAAAAAAAAAA") < 0);
47 it("expands repeatedly", function () { with (this) {
49 for (var i
= 0; i
< 100; ++i
)
51 assert(r
.indexOf("") < 0);
52 assert(r
.indexOf("A B") >= 0);
53 assert(r
.indexOf("A B A B") >= 0);
55 it("expands repetitions differently", function () { with (this) {
56 var r
= DIGITS
.expand("<digit>{500}");
57 assert(~r
.indexOf("0"));
58 assert(~r
.indexOf("1"));
59 assert(~r
.indexOf("2"));
60 assert(~r
.indexOf("3"));
61 assert(~r
.indexOf("4"));
62 assert(~r
.indexOf("5"));
63 assert(~r
.indexOf("6"));
64 assert(~r
.indexOf("7"));
65 assert(~r
.indexOf("8"));
66 assert(~r
.indexOf("9"));