public void CheckResourcesRegistered() { Should.Throw <InvalidOperationException>(() => { Task t = new MockTask(false /*don't register resources*/); try { t.Log.FormatResourceString("bogus"); } catch (Exception e) { // so I can see the exception message in NUnit's "Standard Out" window Console.WriteLine(e.Message); throw; } } ); }
public void LogMessageWithUnmatchedCurly() { MockEngine mockEngine = new MockEngine(); Task t = new MockTask(); t.BuildEngine = mockEngine; t.Log.LogMessage("echo {"); t.Log.LogMessageFromText("{1", MessageImportance.High); t.Log.LogCommandLine("{2"); t.Log.LogWarning("{3"); t.Log.LogError("{4"); mockEngine.AssertLogContains("echo {"); mockEngine.AssertLogContains("{1"); mockEngine.AssertLogContains("{2"); mockEngine.AssertLogContains("{3"); mockEngine.AssertLogContains("{4"); }
public void CheckMessageFromStreamParsesErrorsAndMessagesCorrectly() { IBuildEngine2 mockEngine = new MockEngine(); Task t = new MockTask(); t.BuildEngine = mockEngine; // This should return true since I am passing a canonical error as the stream StringReader sr = new StringReader("error MSB4040: There is no target in the project."); t.Log.LogMessagesFromStream(sr, MessageImportance.High).ShouldBeTrue(); // This should return false since I am passing a canonical warning as the stream sr = new StringReader("warning ABCD123MyCode: Felix is a cat."); t.Log.LogMessagesFromStream(sr, MessageImportance.Low).ShouldBeFalse(); // This should return false since I am passing a non canonical message in the stream sr = new StringReader("Hello World"); t.Log.LogMessagesFromStream(sr, MessageImportance.High).ShouldBeFalse(); }
public void LogFromResources() { MockEngine mockEngine = new MockEngine(); Task t = new MockTask(); t.BuildEngine = mockEngine; t.Log.LogErrorFromResources("MySubcategoryResource", null, "helpkeyword", "filename", 1, 2, 3, 4, "MyErrorResource", "foo"); t.Log.LogErrorFromResources("MyErrorResource", "foo"); t.Log.LogWarningFromResources("MySubcategoryResource", null, "helpkeyword", "filename", 1, 2, 3, 4, "MyWarningResource", "foo"); t.Log.LogWarningFromResources("MyWarningResource", "foo"); mockEngine.Log.Contains("filename(1,2,3,4): Romulan error : Oops I wiped your harddrive foo").ShouldBeTrue(); mockEngine.Log.Contains("filename(1,2,3,4): Romulan warning : Be nice or I wipe your harddrive foo").ShouldBeTrue(); mockEngine.Log.Contains("Oops I wiped your harddrive foo").ShouldBeTrue(); mockEngine.Log.Contains("Be nice or I wipe your harddrive foo").ShouldBeTrue(); }
public void CheckMessageCode() { Task t = new MockTask(); // normal string messageOnly; string code = t.Log.ExtractMessageCode("AL001: This is a message.", out messageOnly); code.ShouldBe("AL001"); messageOnly.ShouldBe("This is a message."); // whitespace before code and after colon is ok code = t.Log.ExtractMessageCode(" AL001: This is a message.", out messageOnly); code.ShouldBe("AL001"); messageOnly.ShouldBe("This is a message."); // whitespace after colon is not ok code = t.Log.ExtractMessageCode("AL001 : This is a message.", out messageOnly); code.ShouldBeNull(); messageOnly.ShouldBe("AL001 : This is a message."); // big code is ok code = t.Log.ExtractMessageCode(" RESGEN7905001: This is a message.", out messageOnly); code.ShouldBe("RESGEN7905001"); messageOnly.ShouldBe("This is a message."); // small code is ok code = t.Log.ExtractMessageCode("R7: This is a message.", out messageOnly); code.ShouldBe("R7"); messageOnly.ShouldBe("This is a message."); // lowercase code is ok code = t.Log.ExtractMessageCode("alink3456: This is a message.", out messageOnly); code.ShouldBe("alink3456"); messageOnly.ShouldBe("This is a message."); // whitespace in code is not ok code = t.Log.ExtractMessageCode(" RES 7905: This is a message.", out messageOnly); code.ShouldBeNull(); messageOnly.ShouldBe(" RES 7905: This is a message."); // only digits in code is not ok code = t.Log.ExtractMessageCode("7905: This is a message.", out messageOnly); code.ShouldBeNull(); messageOnly.ShouldBe("7905: This is a message."); // only letters in code is not ok code = t.Log.ExtractMessageCode("ALINK: This is a message.", out messageOnly); code.ShouldBeNull(); messageOnly.ShouldBe("ALINK: This is a message."); // digits before letters in code is not ok code = t.Log.ExtractMessageCode("6780ALINK: This is a message.", out messageOnly); code.ShouldBeNull(); messageOnly.ShouldBe("6780ALINK: This is a message."); // mixing digits and letters in code is not ok code = t.Log.ExtractMessageCode("LNK658A: This is a message.", out messageOnly); code.ShouldBeNull(); messageOnly.ShouldBe("LNK658A: This is a message."); }
public void CheckMessageFromStreamParsesErrorsAndMessagesCorrectly() { IBuildEngine2 mockEngine = new MockEngine(); Task t = new MockTask(); t.BuildEngine = mockEngine; // This should return true since I am passing a canonical error as the stream StringReader sr = new StringReader("error MSB4040: There is no target in the project."); Assert.True(t.Log.LogMessagesFromStream(sr, MessageImportance.High)); // This should return false since I am passing a canonical warning as the stream sr = new StringReader("warning ABCD123MyCode: Felix is a cat."); Assert.False(t.Log.LogMessagesFromStream(sr, MessageImportance.Low)); // This should return false since I am passing a non canonical message in the stream sr = new StringReader("Hello World"); Assert.False(t.Log.LogMessagesFromStream(sr, MessageImportance.High)); }
public void TestLogFromException() { string message = "exception message"; string stackTrace = "TaskLoggingHelperTests.TestLogFromException"; MockEngine engine = new MockEngine(); MockTask task = new MockTask(); task.BuildEngine = engine; // need to throw and catch an exception so that its stack trace is initialized to something try { Exception inner = new InvalidOperationException(); throw new Exception(message, inner); } catch (Exception e) { // log error without stack trace task.Log.LogErrorFromException(e); engine.AssertLogContains(message); engine.AssertLogDoesntContain(stackTrace); engine.AssertLogDoesntContain("InvalidOperationException"); engine.Log = string.Empty; // log warning with stack trace task.Log.LogWarningFromException(e); engine.AssertLogContains(message); engine.AssertLogDoesntContain(stackTrace); engine.Log = string.Empty; // log error with stack trace task.Log.LogErrorFromException(e, true); engine.AssertLogContains(message); engine.AssertLogContains(stackTrace); engine.AssertLogDoesntContain("InvalidOperationException"); engine.Log = string.Empty; // log warning with stack trace task.Log.LogWarningFromException(e, true); engine.AssertLogContains(message); engine.AssertLogContains(stackTrace); engine.Log = string.Empty; // log error with stack trace and inner exceptions task.Log.LogErrorFromException(e, true, true, "foo.cs"); engine.AssertLogContains(message); engine.AssertLogContains(stackTrace); engine.AssertLogContains("InvalidOperationException"); } }
public void CheckResourcesRegistered() { Assert.Throws<InvalidOperationException>(() => { Task t = new MockTask(false /*don't register resources*/); try { t.Log.FormatResourceString("bogus"); } catch (Exception e) { // so I can see the exception message in NUnit's "Standard Out" window Console.WriteLine(e.Message); throw; } } ); }
public void CheckMessageCode() { Task t = new MockTask(); // normal string messageOnly; string code = t.Log.ExtractMessageCode("AL001: This is a message.", out messageOnly); Assert.Equal("AL001", code); Assert.Equal("This is a message.", messageOnly); // whitespace before code and after colon is ok messageOnly = null; code = t.Log.ExtractMessageCode(" AL001: This is a message.", out messageOnly); Assert.Equal("AL001", code); Assert.Equal("This is a message.", messageOnly); // whitespace after colon is not ok messageOnly = null; code = t.Log.ExtractMessageCode("AL001 : This is a message.", out messageOnly); Assert.Null(code); Assert.Equal("AL001 : This is a message.", messageOnly); // big code is ok messageOnly = null; code = t.Log.ExtractMessageCode(" RESGEN7905001: This is a message.", out messageOnly); Assert.Equal("RESGEN7905001", code); Assert.Equal("This is a message.", messageOnly); // small code is ok messageOnly = null; code = t.Log.ExtractMessageCode("R7: This is a message.", out messageOnly); Assert.Equal("R7", code); Assert.Equal("This is a message.", messageOnly); // lowercase code is ok messageOnly = null; code = t.Log.ExtractMessageCode("alink3456: This is a message.", out messageOnly); Assert.Equal("alink3456", code); Assert.Equal("This is a message.", messageOnly); // whitespace in code is not ok messageOnly = null; code = t.Log.ExtractMessageCode(" RES 7905: This is a message.", out messageOnly); Assert.Null(code); Assert.Equal(" RES 7905: This is a message.", messageOnly); // only digits in code is not ok messageOnly = null; code = t.Log.ExtractMessageCode("7905: This is a message.", out messageOnly); Assert.Null(code); Assert.Equal("7905: This is a message.", messageOnly); // only letters in code is not ok messageOnly = null; code = t.Log.ExtractMessageCode("ALINK: This is a message.", out messageOnly); Assert.Null(code); Assert.Equal("ALINK: This is a message.", messageOnly); // digits before letters in code is not ok messageOnly = null; code = t.Log.ExtractMessageCode("6780ALINK: This is a message.", out messageOnly); Assert.Null(code); Assert.Equal("6780ALINK: This is a message.", messageOnly); // mixing digits and letters in code is not ok messageOnly = null; code = t.Log.ExtractMessageCode("LNK658A: This is a message.", out messageOnly); Assert.Null(code); Assert.Equal("LNK658A: This is a message.", messageOnly); }
public void CheckLogMessageFromFile() { string file = null; try { file = FileUtilities.GetTemporaryFile(); string contents = @"a message here error abcd12345: hey jude. warning xy11: I wanna hold your hand. this is not an error or warning nor is this error def222: norwegian wood"; // This closes the reader File.WriteAllText(file, contents); MockEngine mockEngine = new MockEngine(); Task t = new MockTask(); t.BuildEngine = mockEngine; t.Log.LogMessagesFromFile(file, MessageImportance.High); Assert.Equal(2, mockEngine.Errors); Assert.Equal(1, mockEngine.Warnings); Assert.Equal(3, mockEngine.Messages); mockEngine = new MockEngine(); t = new MockTask(); t.BuildEngine = mockEngine; t.Log.LogMessagesFromFile(file); Assert.Equal(2, mockEngine.Errors); Assert.Equal(1, mockEngine.Warnings); Assert.Equal(3, mockEngine.Messages); } finally { if (null != file) File.Delete(file); } }
public void LogFromResources() { MockEngine mockEngine = new MockEngine(); Task t = new MockTask(); t.BuildEngine = mockEngine; t.Log.LogErrorFromResources("MySubcategoryResource", null, "helpkeyword", "filename", 1, 2, 3, 4, "MyErrorResource", "foo"); t.Log.LogErrorFromResources("MyErrorResource", "foo"); t.Log.LogWarningFromResources("MySubcategoryResource", null, "helpkeyword", "filename", 1, 2, 3, 4, "MyWarningResource", "foo"); t.Log.LogWarningFromResources("MyWarningResource", "foo"); Assert.True(mockEngine.Log.Contains("filename(1,2,3,4): Romulan error : Oops I wiped your harddrive foo")); Assert.True(mockEngine.Log.Contains("filename(1,2,3,4): Romulan warning : Be nice or I wipe your harddrive foo")); Assert.True(mockEngine.Log.Contains("Oops I wiped your harddrive foo")); Assert.True(mockEngine.Log.Contains("Be nice or I wipe your harddrive foo")); }
public void LogMessageWithUnmatchedCurly() { MockEngine mockEngine = new MockEngine(); Task t = new MockTask(); t.BuildEngine = mockEngine; t.Log.LogMessage("echo {"); t.Log.LogMessageFromText("{1", MessageImportance.High); t.Log.LogCommandLine("{2"); t.Log.LogWarning("{3"); t.Log.LogError("{4"); mockEngine.AssertLogContains("echo {"); mockEngine.AssertLogContains("{1"); mockEngine.AssertLogContains("{2"); mockEngine.AssertLogContains("{3"); mockEngine.AssertLogContains("{4"); }
public void LogCommandLine() { MockEngine mockEngine = new MockEngine(); Task t = new MockTask(); t.BuildEngine = mockEngine; t.Log.LogCommandLine("MySuperCommand"); Assert.True(mockEngine.Log.Contains("MySuperCommand")); }
/// <summary> /// Creates an instance of a MockTask, and returns the objects necessary to exercise /// taskEngine.InitializeTask /// </summary> /// <param name="taskNode"></param> /// <param name="taskEngine"></param> /// <param name="mockTask"></param> /// <param name="itemBucket"></param> /// <owner>RGoel</owner> private void InstantiateMockTaskHelper ( XmlElement taskNode, out TaskEngine taskEngine, out MockTask mockTask, out ItemBucket itemBucket, out EngineProxy engineProxy, string condition ) { LoadedType taskClass = new LoadedType(typeof(MockTask), new AssemblyLoadInfo(typeof(MockTask).Assembly.FullName, null)); Engine engine = new Engine(@"c:\"); Project project = new Project(engine); EngineCallback engineCallback = new EngineCallback(engine); TaskExecutionModule taskExecutionModule = new TaskExecutionModule(engineCallback, TaskExecutionModule.TaskExecutionModuleMode.SingleProcMode, false); ProjectBuildState buildContext = new ProjectBuildState(null, null, new BuildEventContext(0, 1, 1, 1)); int nodeProxyID = engineCallback.CreateTaskContext(project, null, buildContext, taskNode, EngineCallback.inProcNode, new BuildEventContext(BuildEventContext.InvalidNodeId, BuildEventContext.InvalidTargetId, BuildEventContext.InvalidProjectContextId, BuildEventContext.InvalidTaskId)); taskEngine = new TaskEngine ( taskNode, null, /* host object */ "In Memory", project.FullFileName, engine.LoggingServices, nodeProxyID, taskExecutionModule, new BuildEventContext(0, 1, 1, 1) ); taskEngine.TaskClass = taskClass; engineProxy = new EngineProxy(taskExecutionModule, nodeProxyID, project.FullFileName, project.FullFileName, engine.LoggingServices, null); mockTask = new MockTask(new EngineProxy(taskExecutionModule, nodeProxyID, project.FullFileName, project.FullFileName, engine.LoggingServices, null)); // The code below creates an item table that is equivalent to the following MSBuild syntax: // // <ItemGroup> // <ItemListContainingOneItem Include="a.cs"> // <Culture>fr-fr</Culture> // </ItemListContainingOneItem> // // <ItemListContainingTwoItems Include="b.cs"> // <HintPath>c:\foo</HintPath> // </ItemListContainingTwoItems> // <ItemListContainingTwoItems Include="c.cs"> // <HintPath>c:\bar</HintPath> // </ItemListContainingTwoItems> // </ItemGroup> // Hashtable itemsByName = new Hashtable(StringComparer.OrdinalIgnoreCase); BuildItemGroup itemListContainingOneItem = new BuildItemGroup(); BuildItem a = itemListContainingOneItem.AddNewItem("ItemListContainingOneItem", "a.cs"); a.SetMetadata("Culture", "fr-fr"); itemsByName["ItemListContainingOneItem"] = itemListContainingOneItem; BuildItemGroup itemListContainingTwoItems = new BuildItemGroup(); BuildItem b = itemListContainingTwoItems.AddNewItem("ItemListContainingTwoItems", "b.cs"); b.SetMetadata("HintPath", "c:\\foo"); BuildItem c = itemListContainingTwoItems.AddNewItem("ItemListContainingTwoItems", "c.cs"); c.SetMetadata("HintPath", "c:\\bar"); itemsByName["ItemListContainingTwoItems"] = itemListContainingTwoItems; itemBucket = new ItemBucket(new string[0], new Dictionary<string, string>(), LookupHelpers.CreateLookup(itemsByName), 0); }
/********************************************************************************* * * Helpers * *********************************************************************************/ private void InstantiateMockTaskHelper ( XmlElement taskNode, out TaskEngine taskEngine, out MockTask mockTask, out ItemBucket itemBucket, out EngineProxy engineProxy ) { InstantiateMockTaskHelper(taskNode, out taskEngine, out mockTask, out itemBucket, out engineProxy, null); }