github.com/aquanetwork/aquachain@v1.7.8/core/asm/lex_test.go (about) 1 // Copyright 2017 The aquachain Authors 2 // This file is part of the aquachain library. 3 // 4 // The aquachain library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The aquachain library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the aquachain library. If not, see <http://www.gnu.org/licenses/>. 16 17 package asm 18 19 import ( 20 "reflect" 21 "testing" 22 ) 23 24 func lexAll(src string) []token { 25 ch := Lex("test.asm", []byte(src), false) 26 27 var tokens []token 28 for i := range ch { 29 tokens = append(tokens, i) 30 } 31 return tokens 32 } 33 34 func TestLexer(t *testing.T) { 35 tests := []struct { 36 input string 37 tokens []token 38 }{ 39 { 40 input: ";; this is a comment", 41 tokens: []token{{typ: lineStart}, {typ: eof}}, 42 }, 43 { 44 input: "0x12345678", 45 tokens: []token{{typ: lineStart}, {typ: number, text: "0x12345678"}, {typ: eof}}, 46 }, 47 { 48 input: "0x123ggg", 49 tokens: []token{{typ: lineStart}, {typ: number, text: "0x123"}, {typ: element, text: "ggg"}, {typ: eof}}, 50 }, 51 { 52 input: "12345678", 53 tokens: []token{{typ: lineStart}, {typ: number, text: "12345678"}, {typ: eof}}, 54 }, 55 { 56 input: "123abc", 57 tokens: []token{{typ: lineStart}, {typ: number, text: "123"}, {typ: element, text: "abc"}, {typ: eof}}, 58 }, 59 { 60 input: "0123abc", 61 tokens: []token{{typ: lineStart}, {typ: number, text: "0123"}, {typ: element, text: "abc"}, {typ: eof}}, 62 }, 63 } 64 65 for _, test := range tests { 66 tokens := lexAll(test.input) 67 if !reflect.DeepEqual(tokens, test.tokens) { 68 t.Errorf("input %q\ngot: %+v\nwant: %+v", test.input, tokens, test.tokens) 69 } 70 } 71 }