|
| 1 | +import { should } from 'chai'; |
| 2 | +import { Tokens, Token } from './utils/tokenizer'; |
| 3 | +import { TokenizerUtil } from'./utils/tokenizerUtil'; |
| 4 | + |
| 5 | +describe("Grammar", function() { |
| 6 | + before(function() { |
| 7 | + should(); |
| 8 | + }); |
| 9 | + |
| 10 | + describe("Class", function() { |
| 11 | + it("has a class keyword, a name and optional storage modifiers", function() { |
| 12 | + |
| 13 | +const input = ` |
| 14 | +namespace TestNamespace |
| 15 | +{ |
| 16 | + public class PublicClass { } |
| 17 | +
|
| 18 | + class DefaultClass { } |
| 19 | +
|
| 20 | + internal class InternalClass { } |
| 21 | +
|
| 22 | + static class DefaultStaticClass { } |
| 23 | +
|
| 24 | + public static class PublicStaticClass { } |
| 25 | +
|
| 26 | + sealed class DefaultSealedClass { } |
| 27 | +
|
| 28 | + public sealed class PublicSealedClass { } |
| 29 | +
|
| 30 | + public abstract class PublicAbstractClass { } |
| 31 | +
|
| 32 | + abstract class DefaultAbstractClass { } |
| 33 | +}`; |
| 34 | + let tokens: Token[] = TokenizerUtil.tokenize(input); |
| 35 | + |
| 36 | + tokens.should.contain(Tokens.StorageModifierKeyword("public", 4, 5)); |
| 37 | + tokens.should.contain(Tokens.ClassKeyword("class", 4, 24)); |
| 38 | + tokens.should.contain(Tokens.ClassIdentifier("PublicClass", 4, 30)); |
| 39 | + |
| 40 | + tokens.should.contain(Tokens.ClassKeyword("class", 6, 24)); |
| 41 | + tokens.should.contain(Tokens.ClassIdentifier("DefaultClass", 6, 30)); |
| 42 | + |
| 43 | + tokens.should.contain(Tokens.StorageModifierKeyword("internal", 8, 5)); |
| 44 | + tokens.should.contain(Tokens.ClassKeyword("class", 8, 24)); |
| 45 | + tokens.should.contain(Tokens.ClassIdentifier("InternalClass", 8, 30)); |
| 46 | + |
| 47 | + tokens.should.contain(Tokens.StorageModifierKeyword("static", 10, 15)); |
| 48 | + tokens.should.contain(Tokens.ClassKeyword("class", 10, 24)); |
| 49 | + tokens.should.contain(Tokens.ClassIdentifier("DefaultStaticClass", 10, 30)); |
| 50 | + |
| 51 | + tokens.should.contain(Tokens.StorageModifierKeyword("public", 12, 5)); |
| 52 | + tokens.should.contain(Tokens.StorageModifierKeyword("static", 12, 15)); |
| 53 | + tokens.should.contain(Tokens.ClassKeyword("class", 12, 24)); |
| 54 | + tokens.should.contain(Tokens.ClassIdentifier("PublicStaticClass", 12, 30)); |
| 55 | + |
| 56 | + tokens.should.contain(Tokens.StorageModifierKeyword("sealed", 14, 15)); |
| 57 | + tokens.should.contain(Tokens.ClassKeyword("class", 14, 24)); |
| 58 | + tokens.should.contain(Tokens.ClassIdentifier("DefaultSealedClass", 14, 30)); |
| 59 | + |
| 60 | + tokens.should.contain(Tokens.StorageModifierKeyword("public", 16, 5)); |
| 61 | + tokens.should.contain(Tokens.StorageModifierKeyword("sealed", 16, 15)); |
| 62 | + tokens.should.contain(Tokens.ClassKeyword("class", 16, 24)); |
| 63 | + tokens.should.contain(Tokens.ClassIdentifier("PublicSealedClass", 16, 30)); |
| 64 | + |
| 65 | + tokens.should.contain(Tokens.StorageModifierKeyword("public", 18, 5)); |
| 66 | + tokens.should.contain(Tokens.StorageModifierKeyword("abstract", 18, 15)); |
| 67 | + tokens.should.contain(Tokens.ClassKeyword("class", 18, 24)); |
| 68 | + tokens.should.contain(Tokens.ClassIdentifier("PublicAbstractClass", 18, 30)); |
| 69 | + |
| 70 | + tokens.should.contain(Tokens.StorageModifierKeyword("abstract", 20, 15)); |
| 71 | + tokens.should.contain(Tokens.ClassKeyword("class", 20, 24)); |
| 72 | + tokens.should.contain(Tokens.ClassIdentifier("DefaultAbstractClass", 20, 30)); |
| 73 | + |
| 74 | + }); |
| 75 | + |
| 76 | + }); |
| 77 | +}); |
| 78 | + |
| 79 | + |
0 commit comments