forked from scriptcs/scriptcs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScriptExecution.cs
More file actions
84 lines (66 loc) · 3.07 KB
/
ScriptExecution.cs
File metadata and controls
84 lines (66 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
namespace ScriptCs.Tests.Acceptance
{
using System;
using System.Reflection;
using ScriptCs.Tests.Acceptance.Support;
using Should;
using Xbehave;
using Xunit;
public static class ScriptExecution
{
[Scenario]
[Example(true)]
[Example(false)]
public static void HelloWorld(bool debug, ScenarioDirectory directory, string output)
{
var scenario = MethodBase.GetCurrentMethod().GetFullName();
"Given a hello world script"
.f(() => directory = ScenarioDirectory.Create(scenario)
.WriteLine("foo.csx", @"Console.WriteLine(""Hello world!"");"));
"When I execute the script with debug set to {0}"
.f(() => output = ScriptCsExe.Run("foo.csx", debug, directory));
"Then I see 'Hello world!'"
.f(() => output.ShouldContain("Hello world!"));
}
[Scenario]
[Example(true)]
[Example(false)]
public static void ScriptThrowsAnException(bool debug, ScenarioDirectory directory, Exception exception)
{
var scenario = MethodBase.GetCurrentMethod().GetFullName();
"Given a script which throws an exception"
.f(() => directory = ScenarioDirectory.Create(scenario)
.WriteLine("foo.csx", @"throw new Exception(""BOOM!"");"));
"When I execute the script with debug set to {0}"
.f(() => exception = Record.Exception(() => ScriptCsExe.Run("foo.csx", debug, directory)));
"Then scriptcs fails"
.f(() => exception.ShouldBeType<ScriptCsException>());
"And I see the exception message"
.f(() => exception.Message.ShouldContain("BOOM!"));
}
[Scenario]
public static void ScriptCanAccessEnv(ScenarioDirectory directory, string output )
{
var scenario = MethodBase.GetCurrentMethod().GetFullName();
"Given a script which access Env"
.f(() => directory = ScenarioDirectory.Create(scenario)
.WriteLine("foo.csx", "Console.WriteLine(Env)"));
"When I execute the script"
.f(()=> output = ScriptCsExe.Run("foo.csx", directory));
"Then the Env object is displayed"
.f(() => output.ShouldContain("ScriptCs.ScriptEnvironment"));
}
[Scenario]
public static void ScriptCanUseDynamic(ScenarioDirectory directory, string output )
{
var scenario = MethodBase.GetCurrentMethod().GetFullName();
"Given a script which uses dynamic"
.f(() => directory = ScenarioDirectory.Create(scenario)
.WriteLine("foo.csx", @"dynamic obj = new ExpandoObject(); obj.foo = ""bar""; Console.WriteLine(obj.foo); ;"));
"When I execute the script"
.f(() => output = ScriptCsExe.Run("foo.csx", directory));
"Then the dynamic value is properly returned "
.f(() => output.ShouldContain("bar"));
}
}
}