public void Should_Insert_Line_Directives_When_Processing_Load_Directives() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.Providers.Add(new FileLoadDirectiveProvider()); fixture.GivenScriptExist("/Working/a.cake", "int x=0;\n#l b.cake\nint y=2;"); fixture.GivenScriptExist("/Working/b.cake", "int z=1;\n#l c.cake\nint p=4;"); fixture.GivenScriptExist("/Working/c.cake", "int o=3;\n#r d.dll"); // When var result = fixture.Analyze("/Working/a.cake"); // Then Assert.Equal(13, result.Lines.Count); Assert.Equal(result.Lines[0], "#line 1 \"/Working/a.cake\""); Assert.Equal(result.Lines[1], "int x=0;"); Assert.Equal(result.Lines[2], "#line 1 \"/Working/b.cake\""); Assert.Equal(result.Lines[3], "int z=1;"); Assert.Equal(result.Lines[4], "#line 1 \"/Working/c.cake\""); Assert.Equal(result.Lines[5], "int o=3;"); Assert.Equal(result.Lines[6], "// #r d.dll"); Assert.Equal(result.Lines[7], "#line 2 \"/Working/b.cake\""); Assert.Equal(result.Lines[8], "// #l c.cake"); Assert.Equal(result.Lines[9], "int p=4;"); Assert.Equal(result.Lines[10], "#line 2 \"/Working/a.cake\""); Assert.Equal(result.Lines[11], "// #l b.cake"); Assert.Equal(result.Lines[12], "int y=2;"); }
public void Should_Process_Single_Script_Reference_Found_In_Source(string source) { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", source); fixture.GivenScriptExist("/Working/utils.cake", "Console.WriteLine();"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Includes.Count); Assert.Equal("/Working/utils.cake", result.Script.Includes[0].Path.FullPath); }
public void Should_Process_Single_Script_Reference_With_Any_Extension_Found_In_Source(string filename) { // Given var fixture = new ScriptAnalyzerFixture(); fixture.AddFileLoadDirectiveProvider(); fixture.GivenScriptExist("/Working/script.cake", $"#l \"{filename}\""); fixture.GivenScriptExist($"/Working/{filename}", "Console.WriteLine();"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Includes.Count); Assert.Equal($"/Working/{filename}", result.Script.Includes[0].Path.FullPath); }
public void Should_Ignore_Globber_Matches_With_Invalid_Extensions(string source) { // Given var fixture = new ScriptAnalyzerFixture(); fixture.AddFileLoadDirectiveProvider(); fixture.GivenScriptExist("/Working/bootstrap.cake", source); fixture.GivenScriptExist("/Working/scripts/utils.cs", "Console.WriteLine();"); fixture.GivenScriptExist("/Working/scripts/other.kake", "Console.WriteLine();"); // When var result = fixture.Analyze("/Working/bootstrap.cake"); // Then Assert.Equal(0, result.Script.Includes.Count); }
public void Should_Process_WindowsRelativePath_Script_Reference_Found_In_Source(string source) { // Given var fixture = new ScriptAnalyzerFixture(windows: true); fixture.AddFileLoadDirectiveProvider(); fixture.GivenScriptExist("C:/Working/script.cake", source); fixture.GivenScriptExist("C:/Working/test/utils.cake", "Console.WriteLine();"); // When var result = fixture.Analyze("C:/Working/script.cake"); // Then Assert.Equal(1, result.Script.Includes.Count); Assert.Equal("C:/Working/test/utils.cake", result.Script.Includes[0].Path.FullPath); }
public void Should_Process_Single_Script_Reference_With_Spaces_In_File_Name_Found_In_Source(string source) { // Given var fixture = new ScriptAnalyzerFixture(); fixture.Providers.Add(new FileLoadDirectiveProvider()); fixture.GivenScriptExist("/Working/script.cake", source); fixture.GivenScriptExist("/Working/test/my utils.cake", "Console.WriteLine();"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Includes.Count); Assert.Equal("/Working/test/my utils.cake", result.Script.Includes[0].Path.FullPath); }
public void Should_Process_Environment_Variable_Found_In_Source(string source) { // Given var fixture = new ScriptAnalyzerFixture(); fixture.Environment.SetEnvironmentVariable("CAKE_TEST_SCRIPT_PATH", "test"); fixture.Providers.Add(new FileLoadDirectiveProvider()); fixture.GivenScriptExist("/Working/script.cake", source); fixture.GivenScriptExist("/Working/test/utils.cake", "Console.WriteLine();"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Includes.Count); Assert.Equal("/Working/test/utils.cake", result.Script.Includes[0].Path.FullPath); }
public void Should_Log_Error_Location_In_Loaded_Script() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.Providers.Add(new FileLoadDirectiveProvider()); fixture.GivenScriptExist("/Working/script.cake", "#load \"local:?path=script2.cake\""); fixture.GivenScriptExist("/Working/script2.cake", "\n#load \"local:?path=1&path=2\""); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(6, result.Lines.Count); Assert.False(result.Succeeded); Assert.Equal(1, result.Errors.Count); Assert.Equal("/Working/script2.cake", result.Errors[0].File.FullPath); Assert.Equal(2, result.Errors[0].Line); Assert.Equal("Query string for #load contains more than one parameter 'path'.", result.Errors[0].Message); }
public void Should_Process_Tool_Directive_Using_Uri() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "#tool \"npm:?package=node\""); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Tools.Count); Assert.Equal("npm:?package=node", result.Script.Tools.ElementAt(0).OriginalString); }
public void Should_Process_Tool_Directive_With_Source() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "#tool \"Hello.World\" \"http://source\""); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Tools.Count); Assert.Equal("nuget:http://source/?package=Hello.World", result.Script.Tools.ElementAt(0).OriginalString); }
public void Should_Process_Using_Alias_Directives() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "using Core = Cake.Core;"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.UsingAliases.Count); Assert.Equal("using Core = Cake.Core;", result.Script.UsingAliases.ElementAt(0)); }
public void Should_Process_Define_Directives() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "#define FOO"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Defines.Count); Assert.Equal("#define FOO", result.Script.Defines.ElementAt(0)); }
public void Should_Process_Using_Static_Directives() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "using static System.Math;"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.UsingStaticDirectives.Count); Assert.Equal("using static System.Math;", result.Script.UsingStaticDirectives.ElementAt(0)); }
public void Should_Return_Single_Assembly_Reference_Found_In_Source(string source) { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", source); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.References.Count); Assert.Equal("hello.dll", result.Script.References.ElementAt(0)); }
public void Should_Process_Break_Directive() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "#break"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(2, result.Lines.Count); Assert.Equal(result.Lines[0], "#line 1 \"/Working/script.cake\""); Assert.Equal(result.Lines[1], @"if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debugger.Break(); }"); }
public void Should_Process_Addin_Directive_With_Source() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "#addin \"Hello.World\" \"http://source\""); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Addins.Count); Assert.Equal("Hello.World", result.Script.Addins.ElementAt(0).PackageId); Assert.Equal("http://source", result.Script.Addins.ElementAt(0).Source); }
public void Should_Process_Tools_Directive_Without_Source() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "#tool \"Hello.World\""); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(1, result.Script.Tools.Count); Assert.Equal("Hello.World", result.Script.Tools.ElementAt(0).PackageId); Assert.Equal(null, result.Script.Tools.ElementAt(0).Source); }
public void Should_Return_Code_Read_From_File() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "Console.ReadKey();"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(2, result.Lines.Count); Assert.Equal("#line 1 \"/Working/script.cake\"", result.Lines[0]); Assert.Equal("Console.ReadKey();", result.Lines[1]); }
public void Should_Remove_Shebang() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "#!/usr/bin/cake\nConsole.WriteLine();"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(2, result.Lines.Count); Assert.Equal(result.Lines[0], "#line 1 \"/Working/script.cake\""); Assert.Equal(result.Lines[1], "Console.WriteLine();"); }
public void Should_Keep_Using_Block() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.GivenScriptExist("/Working/script.cake", "using(new Temp())\n{\n}"); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(0, result.Script.UsingAliases.Count); Assert.Equal(0, result.Script.Namespaces.Count); Assert.Equal(4, result.Lines.Count); Assert.Equal(result.Lines[0], "#line 1 \"/Working/script.cake\""); Assert.Equal(result.Lines[1], "using(new Temp())"); Assert.Equal(result.Lines[2], "{"); Assert.Equal(result.Lines[3], "}"); }
public void Should_Log_Error_Location() { // Given var fixture = new ScriptAnalyzerFixture(); fixture.Providers.Add(new FileLoadDirectiveProvider()); fixture.GivenScriptExist("/Working/script.cake", "#load \"local:?pat\""); // When var result = fixture.Analyze("/Working/script.cake"); // Then Assert.Equal(2, result.Lines.Count); Assert.Equal("#line 1 \"/Working/script.cake\"", result.Lines[0]); Assert.Equal("// #load \"local:?pat\"", result.Lines[1]); Assert.False(result.Succeeded); Assert.Equal(1, result.Errors.Count); Assert.Equal("/Working/script.cake", result.Errors[0].File.FullPath); Assert.Equal(1, result.Errors[0].Line); Assert.Equal("Query string for #load is missing parameter 'path'.", result.Errors[0].Message); }