alielie
2026-09-10 9ec80cafc23f5ee3278cacce3c9f86f4087b435a
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
using System;
using NUnit.Framework;
 
namespace DynamicExpresso.UnitTest
{
    [TestFixture]
    public class StaticTest
    {
        [Test]
        public void Static_Properties_of_Base_Types()
        {
            var target = new Interpreter();
 
            Assert.That(target.Eval("Int32.MaxValue"), Is.EqualTo(int.MaxValue));
            Assert.That(target.Eval("Double.MaxValue"), Is.EqualTo(double.MaxValue));
            Assert.That(target.Eval("DateTime.MaxValue"), Is.EqualTo(DateTime.MaxValue));
            Assert.That(target.Eval("DateTime.Today"), Is.EqualTo(DateTime.Today));
            Assert.That(target.Eval("String.Empty"), Is.EqualTo(string.Empty));
            Assert.That(target.Eval("Boolean.FalseString"), Is.EqualTo(bool.FalseString));
            Assert.That(target.Eval("TimeSpan.TicksPerMillisecond"), Is.EqualTo(TimeSpan.TicksPerMillisecond));
            Assert.That(target.Eval("Guid.Empty"), Is.EqualTo(Guid.Empty));
        }
 
        [Test]
        public void Static_Methods_of_Base_Types()
        {
            var target = new Interpreter();
 
            Assert.That(target.Eval("TimeSpan.FromMilliseconds(2000.49)"), Is.EqualTo(TimeSpan.FromMilliseconds(2000.49)));
            Assert.That(target.Eval("DateTime.DaysInMonth(2094, 11)"), Is.EqualTo(DateTime.DaysInMonth(2094, 11)));
        }
 
        [Test]
        public void Math_Class()
        {
            var target = new Interpreter();
 
            Assert.That(target.Eval("Math.Pow(3, 4)"), Is.EqualTo(Math.Pow(3, 4)));
            Assert.That(target.Eval("Math.Sin(30.234)"), Is.EqualTo(Math.Sin(30.234)));
        }
 
        [Test]
        public void Convert_Class()
        {
            var target = new Interpreter();
 
            Assert.That(target.Eval("Convert.ToString(3)"), Is.EqualTo(Convert.ToString(3)));
            Assert.That(target.Eval("Convert.ToInt16(\"23\")"), Is.EqualTo(Convert.ToInt16("23")));
        }
 
        [Test]
        public void CSharp_Primitive_Type_Keywords()
        {
            var target = new Interpreter();
 
            Assert.That(target.Eval("int.MaxValue"), Is.EqualTo(int.MaxValue));
            Assert.That(target.Eval("double.MaxValue"), Is.EqualTo(double.MaxValue));
            Assert.That(target.Eval("string.Empty"), Is.EqualTo(string.Empty));
            Assert.That(target.Eval("bool.FalseString"), Is.EqualTo(bool.FalseString));
            Assert.That(target.Eval("char.MinValue"), Is.EqualTo(char.MinValue));
            Assert.That(target.Eval("byte.MinValue"), Is.EqualTo(byte.MinValue));
        }
 
        [Test]
        public void Static_Properties_And_Methods_Of_Custom_Types()
        {
            var target = new Interpreter()
                                            .Reference(typeof(Uri))
                                            .Reference(typeof(MyTestService));
 
            Assert.That(target.Eval("Uri.UriSchemeHttp"), Is.EqualTo(Uri.UriSchemeHttp));
            Assert.That(target.Eval("MyTestService.MyStaticMethod()"), Is.EqualTo(MyTestService.MyStaticMethod()));
        }
 
        [Test]
        public void Type_Related_Static_Methods()
        {
            var target = new Interpreter()
                                            .Reference(typeof(Type));
 
            Assert.That(target.Eval("Type.GetType(\"System.Globalization.CultureInfo\")"), Is.EqualTo(Type.GetType("System.Globalization.CultureInfo")));
            Assert.That(target.Eval("DateTime.Now.GetType()"), Is.EqualTo(DateTime.Now.GetType()));
        }
 
        private class MyTestService
        {
            public static int MyStaticMethod()
            {
                return 23;
            }
        }
    }
}