forked from daveaglick/Scripty
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestHelpers.cs
More file actions
128 lines (111 loc) · 3.81 KB
/
Copy pathTestHelpers.cs
File metadata and controls
128 lines (111 loc) · 3.81 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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
namespace Scripty.Core.Tests
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
public class TestHelpers
{
public const string TEST_FILE_CONTENT = "TESTCONTENT";
public string ProjectFilePath { get; }
private readonly string _testFileSubfolder;
/// <summary>
/// Initializes a new instance of the <see cref="TestHelpers"/> class.
/// </summary>
/// <param name="testFileSubfolder">The test file subfolder relative to the project root.</param>
public TestHelpers(string testFileSubfolder = "")
{
ProjectFilePath = Path.Combine(GetProjectRootFolder(), "Scripty.Core.Tests.csproj");
_testFileSubfolder = testFileSubfolder;
}
public ScriptEngine BuildScriptEngine()
{
var se = new ScriptEngine(ProjectFilePath);
return se;
}
public ScriptResult EvaluateScript(string scriptFilePath, List<Assembly> additionalAssemblies = null,
List<string> additionalNamespaces = null, ScriptEngine engine = null)
{
var eng = engine;
if (eng == null)
{
eng = BuildScriptEngine();
}
var ss = new ScriptSource(scriptFilePath, GetFileContent(scriptFilePath));
var result = eng.Evaluate(ss).Result; // additionalAssemblies, additionalNamespaces).Result;
return result;
}
public static string GetProjectRootFolder()
{
return Path.GetFullPath($"{AppDomain.CurrentDomain.BaseDirectory}/../../");
}
public string GetTestFileSubFolder()
{
return Path.Combine(GetProjectRootFolder(), _testFileSubfolder);
}
public string GetTestFilePath(string fileName)
{
return Path.Combine(GetTestFileSubFolder(), fileName);
}
public string GetFileContent(string fileName)
{
return File.ReadAllText(GetTestFilePath(fileName));
}
public void WriteFileContent(string fileName, string fileContent)
{
File.WriteAllText(fileName, fileContent);
}
public void RemoveFiles(List<string> filesToRemoveIfPresent)
{
if (filesToRemoveIfPresent != null)
{
foreach (var file in filesToRemoveIfPresent)
{
var filePath = GetTestFilePath(file);
if (File.Exists(filePath))
{
File.Delete(filePath);
}
}
}
}
public void RemoveFiles(string filePattern)
{
foreach (var file in Directory.GetFiles(GetTestFileSubFolder(), filePattern))
{
try
{
File.Delete(file);
}
catch (Exception e)
{
Trace.TraceError($"Failed to delete file '{file}', err: {e}");
}
}
}
public void CreateFiles(List<string> filesToCreateIfNotPresent)
{
foreach (var file in filesToCreateIfNotPresent)
{
var filePath = GetTestFilePath(file);
if (File.Exists(filePath) == false)
{
File.WriteAllText(filePath, TEST_FILE_CONTENT);
}
}
}
public string[] GetFileLines(string filePath)
{
try
{
return File.ReadAllLines(filePath);
}
catch (Exception e)
{
Trace.TraceError($"Failed to get file lines. {e}");
}
return null;
}
}
}