From 47e8c6f331525f01f150ba80a3557a18618b0cf5 Mon Sep 17 00:00:00 2001 From: Georgi Barnev Date: Wed, 7 Nov 2018 13:05:43 +0200 Subject: Homework 1 - C# Lexer and Syntax Highlighter for Javascript (#34) * Initial lexer structure * Added IInputStream interface for the Lexer and its base implementation in FileInputStream not implemented yet. * Extend InputStream interface * Implement FileInputStream not tested * Lexer almost ready - comments need to be parsed. InputStream ready * Added some TODOs * Add error token type and almost parse comments * Parse multiline comments and fix string parsing to not include the quotes. * Added Syntax Highlighter, added support for more js reserved words, removed error tokens to not break the actual word tokens, fixed comments and string token representation to include its special characters * Initial lexer structure * Added IInputStream interface for the Lexer and its base implementation in FileInputStream not implemented yet. * Extend InputStream interface * Implement FileInputStream not tested * Lexer almost ready - comments need to be parsed. InputStream ready * Added some TODOs * Add error token type and almost parse comments * Parse multiline comments and fix string parsing to not include the quotes. * Added Syntax Highlighter, added support for more js reserved words, removed error tokens to not break the actual word tokens, fixed comments and string token representation to include its special characters * Improve project structure and add tests * Fix physical path structure of the projects * Write tests, fix tokenizer bugs * Fix README format, fix AssemblyInfo name * Escape slashes in readme --- .../BaseInputStreamFileTests.cs | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 homework/81709/JSCompiler.Core.Tests/BaseInputStreamFileTests.cs (limited to 'homework/81709/JSCompiler.Core.Tests/BaseInputStreamFileTests.cs') diff --git a/homework/81709/JSCompiler.Core.Tests/BaseInputStreamFileTests.cs b/homework/81709/JSCompiler.Core.Tests/BaseInputStreamFileTests.cs new file mode 100644 index 0000000..ebc557c --- /dev/null +++ b/homework/81709/JSCompiler.Core.Tests/BaseInputStreamFileTests.cs @@ -0,0 +1,117 @@ +using System; +using System.Text; +using System.Collections.Generic; +using System.IO; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace JSCompiler.Core.Tests +{ + [TestClass] + public class BaseInputStreamTests + { + [TestMethod] + public void IsEndOfStream_WhenNotEnd_ReturnsFalse() + { + byte[] buff = new byte[3] { 32, 14, 25 }; + MemoryStream memStream = new MemoryStream(buff); + BaseInputStream testInputStream = new BaseInputStream(memStream); + + bool isEnd; + for(int i = 0; i < 2; i++) + { + isEnd = testInputStream.IsEndOfStream(); + testInputStream.Next(); + Assert.IsFalse(isEnd); + } + } + + [TestMethod] + public void IsEndOfStream_AtBeginningWithoutData_ReturnsTrue() + { + MemoryStream memStream = new MemoryStream(); + BaseInputStream testInputStream = new BaseInputStream(memStream); + + bool isEnd = testInputStream.IsEndOfStream(); + + Assert.IsTrue(isEnd); + } + + [TestMethod] + public void IsEndOfStream_WhenEnd_ReturnsTrue() + { + byte[] buff = new byte[3] { 32, 14, 25 }; + MemoryStream memStream = new MemoryStream(buff); + BaseInputStream testInputStream = new BaseInputStream(memStream); + + for (int i = 0; i < 3; i++, testInputStream.Next()); + bool isEnd = testInputStream.IsEndOfStream(); + + Assert.IsTrue(isEnd); + } + + [TestMethod] + public void Peek_AtPosition_ReturnsCorrectItemFromStream() + { + byte[] buff = new byte[8] { 32, 14, 25, 14, 12, 51, 25, 33 }; + MemoryStream memStream = new MemoryStream(buff); + BaseInputStream testInputStream = new BaseInputStream(memStream); + char item; + + for (int i = 0; i < 5; i++, testInputStream.Next()) + { + item = testInputStream.Peek(); + Assert.AreEqual((char)buff[i], item); + } + } + + [TestMethod] + public void Peek_AtEnd_ReturnsEndItem() + { + byte[] buff = new byte[3] { 32, 14, 25 }; + MemoryStream memStream = new MemoryStream(buff); + BaseInputStream testInputStream = new BaseInputStream(memStream); + + for (int i = 0; i < 3; i++, testInputStream.Next()); + char last = testInputStream.Peek(); + + Assert.AreEqual(0, last); + } + + [TestMethod] + [ExpectedException(typeof(EndOfStreamException))] + public void Next_WhenEndStream_ThrowsEndOfStreamException() + { + byte[] buff = new byte[3] { 32, 14, 25 }; + MemoryStream memStream = new MemoryStream(buff); + BaseInputStream testInputStream = new BaseInputStream(memStream); + + for (int i = 0; i < 4; i++, testInputStream.Next()); + } + + [TestMethod] + public void Next_WhenBuffersAreSwapped_ReturnsCorrectItem() + { + byte[] buff = new byte[10] { 32, 14, 25, 14, 23, 42, 16, 21, 15, 76 }; + MemoryStream memStream = new MemoryStream(buff); + BaseInputStream testInputStream = new BaseInputStream(memStream, 3); + + for (int i = 0; i < 10; i++) + { + char curr = testInputStream.Next(); + Assert.AreEqual((char)buff[i], curr); + } + } + + [TestMethod] + public void Line_NewLinesTracking_ReturnsCorrectNumberOfLines() + { + byte[] buff = new byte[10] { (byte) '\n', 32, 14, 25, 14, (byte) '\n', 42, 16, (byte) '\n', (byte)'\n' }; + MemoryStream memStream = new MemoryStream(buff); + BaseInputStream testInputStream = new BaseInputStream(memStream); + + for (int i = 0; i < 10; i++, testInputStream.Next()); + + Assert.AreEqual(4, testInputStream.Line); + } + } +} -- cgit v1.3.1-23-gd82d