/
ModuleExpressionTests.cs
115 lines (86 loc) · 4.22 KB
/
ModuleExpressionTests.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
104
105
106
107
108
109
110
111
112
113
114
115
namespace RubySharp.Core.Tests.Expressions
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using RubySharp.Core.Expressions;
using RubySharp.Core.Language;
[TestClass]
public class ModuleExpressionTests
{
[TestMethod]
public void EvaluateModuleExpression()
{
Machine machine = new Machine();
ModuleExpression expr = new ModuleExpression("Module1", new ConstantExpression(1));
Assert.AreEqual(1, expr.Evaluate(machine.RootContext));
var result = machine.RootContext.GetValue("Module1");
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(DynamicClass));
var module = (DynamicClass)result;
var method = module.GetMethod("name");
Assert.IsNotNull(method);
Assert.AreEqual("Module1", method.Apply(module, null));
}
[TestMethod]
public void EvaluateModuleExpressionWithConstantAssignment()
{
Machine machine = new Machine();
ModuleExpression expr = new ModuleExpression("Module1", new AssignExpression("ONE", new ConstantExpression(1)));
Assert.AreEqual(1, expr.Evaluate(machine.RootContext));
var result = machine.RootContext.GetValue("Module1");
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(DynamicClass));
var module = (DynamicClass)result;
Assert.AreEqual(1, module.Constants.GetLocalValue("ONE"));
}
[TestMethod]
public void EvaluateModuleExpressionWithInternalAssignment()
{
Machine machine = new Machine();
ModuleExpression expr = new ModuleExpression("Module1", new AssignExpression("one", new ConstantExpression(1)));
Assert.AreEqual(1, expr.Evaluate(machine.RootContext));
var result = machine.RootContext.GetValue("Module1");
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(DynamicClass));
var module = (DynamicClass)result;
Assert.IsFalse(module.Constants.HasLocalValue("one"));
}
[TestMethod]
public void EvaluateModuleExpressionWithClassDefinition()
{
Machine machine = new Machine();
ModuleExpression expr = new ModuleExpression("Module1", new ClassExpression(new NameExpression("Foo"), new ConstantExpression(1)));
Assert.AreEqual(null, expr.Evaluate(machine.RootContext));
var result = machine.RootContext.GetValue("Module1");
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(DynamicClass));
var module = (DynamicClass)result;
var @class = module.Constants.GetLocalValue("Foo");
Assert.IsNotNull(@class);
Assert.IsInstanceOfType(@class, typeof(DynamicClass));
Assert.AreEqual("Foo", ((DynamicClass)@class).Name);
Assert.AreEqual("Module1::Foo", ((DynamicClass)@class).FullName);
}
[TestMethod]
public void Equals()
{
ModuleExpression mexpr1 = new ModuleExpression("Module1", new ConstantExpression(1));
ModuleExpression mexpr2 = new ModuleExpression("Module1", new ConstantExpression(2));
ModuleExpression mexpr3 = new ModuleExpression("Module2", new ConstantExpression(1));
ModuleExpression mexpr4 = new ModuleExpression("Module1", new ConstantExpression(1));
Assert.IsFalse(mexpr1.Equals(null));
Assert.IsFalse(mexpr1.Equals(123));
Assert.IsFalse(mexpr1.Equals("foo"));
Assert.IsTrue(mexpr1.Equals(mexpr4));
Assert.IsTrue(mexpr4.Equals(mexpr1));
Assert.AreEqual(mexpr1.GetHashCode(), mexpr4.GetHashCode());
Assert.IsFalse(mexpr1.Equals(mexpr2));
Assert.IsFalse(mexpr2.Equals(mexpr1));
Assert.IsFalse(mexpr1.Equals(mexpr3));
Assert.IsFalse(mexpr3.Equals(mexpr1));
}
}
}