using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Text; namespace CapnpC.CSharp.Generator.Tests { [TestClass] [TestCategory("Coverage")] public class CapnpMessageUnitTests { [TestMethod] public void ParseError() { var msg = new CapnpMessage(@"f:\code\invalid.capnp:5:1: error: Parse error."); Assert.AreEqual(@"f:\code\invalid.capnp:5:1: error: Parse error.", msg.FullMessage); Assert.IsTrue(msg.IsParseSuccess); Assert.AreEqual(@"f:\code\invalid.capnp", msg.FileName); Assert.AreEqual(5, msg.Line); Assert.AreEqual(1, msg.Column); Assert.AreEqual(0, msg.EndColumn); Assert.AreEqual("error", msg.Category); Assert.AreEqual("Parse error.", msg.MessageText); } [TestMethod] public void ColumnSpan() { var msg = new CapnpMessage(@"f:\code\invalid.capnp:10:7-8: error: Duplicate ordinal number."); Assert.IsTrue(msg.IsParseSuccess); Assert.AreEqual(@"f:\code\invalid.capnp", msg.FileName); Assert.AreEqual(10, msg.Line); Assert.AreEqual(7, msg.Column); Assert.AreEqual(8, msg.EndColumn); Assert.AreEqual("error", msg.Category); Assert.AreEqual("Duplicate ordinal number.", msg.MessageText); } [TestMethod] public void NoSuchFile() { var msg = new CapnpMessage(@"C:\ProgramData\chocolatey\lib\capnproto\tools\capnproto-tools-win32-0.7.0\capnp.exe compile: doesnotexist.capnp: no such file"); Assert.IsFalse(msg.IsParseSuccess); Assert.AreEqual(@"C:\ProgramData\chocolatey\lib\capnproto\tools\capnproto-tools-win32-0.7.0\capnp.exe compile: doesnotexist.capnp: no such file", msg.FullMessage); } [TestMethod] public void NoId() { var msg = new CapnpMessage(@"empty.capnp:1:1: error: File does not declare an ID. I've generated one for you. Add this line to your file: @0xc82955a0c779197d;"); Assert.IsTrue(msg.IsParseSuccess); Assert.AreEqual("empty.capnp", msg.FileName); Assert.AreEqual(1, msg.Line); Assert.AreEqual(1, msg.Column); Assert.AreEqual("error", msg.Category); Assert.AreEqual("File does not declare an ID. I've generated one for you. Add this line to your file: @0xc82955a0c779197d;", msg.MessageText); } [TestMethod] public void AnnoyingNTFSAlternateDataStream1() { var msg = new CapnpMessage(@"3:2:1:1: error: File does not declare an ID. I've generated one for you. Add this line to your file: @0xc82955a0c779197d;"); Assert.IsTrue(msg.IsParseSuccess); Assert.AreEqual("3:2", msg.FileName); Assert.AreEqual(1, msg.Line); Assert.AreEqual(1, msg.Column); Assert.AreEqual("error", msg.Category); Assert.AreEqual("File does not declare an ID. I've generated one for you. Add this line to your file: @0xc82955a0c779197d;", msg.MessageText); } [TestMethod] public void AnnoyingNTFSAlternateDataStream2() { var msg = new CapnpMessage(@"c:\3:2:1:1: error: File does not declare an ID. I've generated one for you. Add this line to your file: @0xc82955a0c779197d;"); Assert.IsTrue(msg.IsParseSuccess); Assert.AreEqual(@"c:\3:2", msg.FileName); Assert.AreEqual(1, msg.Line); Assert.AreEqual(1, msg.Column); Assert.AreEqual("error", msg.Category); Assert.AreEqual("File does not declare an ID. I've generated one for you. Add this line to your file: @0xc82955a0c779197d;", msg.MessageText); } [TestMethod] public void AnnoyingNTFSAlternateDataStream3() { var msg = new CapnpMessage(@"\\?\c:\3:2:1:1: error: File does not declare an ID. I've generated one for you. Add this line to your file: @0xc82955a0c779197d;"); Assert.IsTrue(msg.IsParseSuccess); Assert.AreEqual(@"\\?\c:\3:2", msg.FileName); Assert.AreEqual(1, msg.Line); Assert.AreEqual(1, msg.Column); Assert.AreEqual("error", msg.Category); Assert.AreEqual("File does not declare an ID. I've generated one for you. Add this line to your file: @0xc82955a0c779197d;", msg.MessageText); } [TestMethod] public void AnnoyingNTFSAlternateDataStream4() { var msg = new CapnpMessage(@"1:2-3:10:7-8: error: Duplicate ordinal number."); Assert.IsTrue(msg.IsParseSuccess); Assert.AreEqual(@"1:2-3", msg.FileName); Assert.AreEqual(10, msg.Line); Assert.AreEqual(7, msg.Column); Assert.AreEqual(8, msg.EndColumn); Assert.AreEqual("error", msg.Category); Assert.AreEqual("Duplicate ordinal number.", msg.MessageText); } } }