Esempio n. 1
0
		public void ShouldReturnNumberTokenTypeWhenInputIsInvalidNumber()
		{
			var stream = new PushBackCharacterStream(new StringReader("123asdf"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Number, token.Type);
			Assert.AreEqual("123asdf", token.Text);
		}
Esempio n. 2
0
 public Lexer(PushBackCharacterStream inputText)
 {
     _source = inputText;
 }
Esempio n. 3
0
		public void ShouldStopParsingSymbolWhenDoubleQuoteFound()
		{
			var stream = new PushBackCharacterStream(new StringReader("asdf\"str\""));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Symbol, token.Type);
			Assert.AreEqual("asdf", token.Text);

			token = lexer.Next();
			Assert.AreEqual(TokenType.String, token.Type);
			Assert.AreEqual("\"str\"", token.Text);
		}
Esempio n. 4
0
		public void ShouldReturnNil()
		{
			var stream = new PushBackCharacterStream(new StringReader("nil"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Nil, token.Type);
			Assert.AreEqual("nil", token.Text);
			Assert.IsFalse(stream.HasMore);
		}
Esempio n. 5
0
		public void ShouldReturnKeywordFollowByListStart()
		{
			var stream = new PushBackCharacterStream(new StringReader(":asdf("));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Keyword, token.Type);
			Assert.AreEqual(":asdf", token.Text);
			Assert.AreEqual(TokenType.ListStart, lexer.Next().Type);
		}
Esempio n. 6
0
		public void ShouldReturnBooleanWhenFalseIsInput()
		{
			var stream = new PushBackCharacterStream(new StringReader("false"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Boolean, token.Type);
			Assert.AreEqual("false", token.Text);
			Assert.IsFalse(stream.HasMore);
		}
Esempio n. 7
0
		public void ShouldReturnTwoSymbolsSeparatedByWhitespace()
		{
			var stream = new PushBackCharacterStream(new StringReader("symbol1 symbol2"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Symbol, token.Type);
			Assert.AreEqual("symbol1", token.Text);

			token = lexer.Next();
			Assert.AreEqual(TokenType.Whitespace, token.Type);

			token = lexer.Next();
			Assert.AreEqual(TokenType.Symbol, token.Type);
			Assert.AreEqual("symbol2", token.Text);
		}
Esempio n. 8
0
		public void ShouldReturnKeywordWithNoName()
		{
			var stream = new PushBackCharacterStream(new StringReader(":"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Keyword, token.Type);
			Assert.AreEqual(":", token.Text);
		}
Esempio n. 9
0
		public void ShouldReturnSymbolWhenItHasADot()
		{
			var stream = new PushBackCharacterStream(new StringReader("namespace.test"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Symbol, token.Type);
			Assert.AreEqual("namespace.test", token.Text);
		}
Esempio n. 10
0
		public void ShouldReturnSymbolImmediatelyFollowedByComment()
		{
			var stream = new PushBackCharacterStream(new StringReader("test;comment"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Symbol, token.Type);
			Assert.AreEqual("test", token.Text);

			token = lexer.Next();
			Assert.AreEqual(TokenType.Comment, token.Type);
			Assert.AreEqual(";comment", token.Text);
		}
Esempio n. 11
0
		public void ShouldReturnCommentToEndOfLineOnly()
		{
			var stream = new PushBackCharacterStream(new StringReader("; test\r\n123"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Comment, token.Type);
			Assert.AreEqual("; test", token.Text);
		}
Esempio n. 12
0
		public void ShouldReturnCommentWithTrailingWhitespace()
		{
			var stream = new PushBackCharacterStream(new StringReader("; test text  \r\n"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Comment, token.Type);
			Assert.AreEqual("; test text  ", token.Text);

			token = lexer.Next();
			Assert.AreEqual(TokenType.Whitespace, token.Type);
			Assert.AreEqual("\r\n", token.Text);
		}
Esempio n. 13
0
		public void ShouldReturnRealNumber()
		{
			var stream = new PushBackCharacterStream(new StringReader("123.321"));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Number, token.Type);
			Assert.AreEqual("123.321", token.Text);
		}
Esempio n. 14
0
		public void ShouldReturnNumberFollowByWhitespaceAndAString()
		{
			var stream = new PushBackCharacterStream(new StringReader("123 \"asdf\""));
			Lexer lexer = new Lexer(stream);
			Token token = lexer.Next();
			Assert.AreEqual(TokenType.Number, token.Type);
			Assert.AreEqual("123", token.Text);
			Assert.AreEqual(0, token.StartIndex);

			token = lexer.Next();
			Assert.AreEqual(TokenType.Whitespace, token.Type);
			Assert.AreEqual(" ", token.Text);
			Assert.AreEqual(3, token.StartIndex);

			token = lexer.Next();
			Assert.AreEqual(TokenType.String, token.Type);
			Assert.AreEqual("\"asdf\"", token.Text);
			Assert.AreEqual(4, token.StartIndex);
		}
Esempio n. 15
0
 public Lexer(PushBackCharacterStream inputText)
 {
     _source = inputText;
 }