-
Notifications
You must be signed in to change notification settings - Fork 153
/
Copy pathMisc.NetFramework.cs
103 lines (94 loc) · 4.59 KB
/
Misc.NetFramework.cs
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
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.CodeDom.Compiler;
using System.Linq;
using System.Reflection;
using System.Text;
using Microsoft.ClearScript.Util;
using Microsoft.VisualBasic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Microsoft.ClearScript.Test
{
public static partial class TestUtil
{
public static void InvokeVBTestSub(string code, string extraDefinitions = null)
{
var options = new CompilerParameters { GenerateInMemory = true };
options.ReferencedAssemblies.Add("ClearScript.Core.dll");
options.ReferencedAssemblies.Add("ClearScript.V8.dll");
options.ReferencedAssemblies.Add("ClearScript.Windows.Core.dll");
options.ReferencedAssemblies.Add("ClearScript.Windows.dll");
options.ReferencedAssemblies.Add("ClearScriptTest.dll");
options.ReferencedAssemblies.Add("System.Runtime.dll");
options.ReferencedAssemblies.Add(typeof(Enumerable).Assembly.Location);
options.ReferencedAssemblies.Add(typeof(Assert).Assembly.Location);
var results = new VBCodeProvider().CompileAssemblyFromSource(options, MiscHelpers.FormatInvariant(@"
Imports System
Imports System.Linq
Imports System.Runtime.InteropServices
Imports Microsoft.ClearScript
Imports Microsoft.ClearScript.Test
Imports Microsoft.ClearScript.V8
Imports Microsoft.ClearScript.Windows
Imports Microsoft.VisualStudio.TestTools.UnitTesting
{1}
Module TestModule
Sub TestSub
{0}
End Sub
End Module
", code, extraDefinitions ?? string.Empty));
if (results.Errors.HasErrors)
{
var messageBuilder = new StringBuilder("Errors encountered during Visual Basic compilation:\n");
foreach (var error in results.Errors)
{
messageBuilder.Append(error);
messageBuilder.Append('\n');
}
throw new OperationCanceledException(messageBuilder.ToString());
}
results.CompiledAssembly.GetType("TestModule").InvokeMember("TestSub", BindingFlags.InvokeMethod, null, null, ArrayHelpers.GetEmptyArray<object>());
}
public static object InvokeVBTestFunction(string code, string extraDefinitions = null)
{
var options = new CompilerParameters { GenerateInMemory = true };
options.ReferencedAssemblies.Add("ClearScript.Core.dll");
options.ReferencedAssemblies.Add("ClearScript.V8.dll");
options.ReferencedAssemblies.Add("ClearScript.Windows.Core.dll");
options.ReferencedAssemblies.Add("ClearScript.Windows.dll");
options.ReferencedAssemblies.Add("ClearScriptTest.dll");
options.ReferencedAssemblies.Add("System.Runtime.dll");
options.ReferencedAssemblies.Add(typeof(Enumerable).Assembly.Location);
options.ReferencedAssemblies.Add(typeof(Assert).Assembly.Location);
var results = new VBCodeProvider().CompileAssemblyFromSource(options, MiscHelpers.FormatInvariant(@"
Imports System
Imports System.Linq
Imports System.Runtime.InteropServices
Imports Microsoft.ClearScript
Imports Microsoft.ClearScript.Test
Imports Microsoft.ClearScript.V8
Imports Microsoft.ClearScript.Windows
Imports Microsoft.VisualStudio.TestTools.UnitTesting
{1}
Module TestModule
Function TestFunction
{0}
End Function
End Module
", code, extraDefinitions ?? string.Empty));
if (results.Errors.HasErrors)
{
var messageBuilder = new StringBuilder("Errors encountered during Visual Basic compilation:\n");
foreach (var error in results.Errors)
{
messageBuilder.Append(error);
messageBuilder.Append('\n');
}
throw new OperationCanceledException(messageBuilder.ToString());
}
return results.CompiledAssembly.GetType("TestModule").InvokeMember("TestFunction", BindingFlags.InvokeMethod, null, null, ArrayHelpers.GetEmptyArray<object>());
}
}
}