-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
BasicObjectTests.cs
81 lines (77 loc) · 2.56 KB
/
BasicObjectTests.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
using NUnit.Framework;
using System;
using System.Text.Json;
using Tenray.Topaz.API;
namespace Tenray.Topaz.Test;
public sealed class BasicObjectTests
{
[TestCase(false)]
[TestCase(true)]
public void TestObject1(bool useThreadSafeJsObjects)
{
var engine = new TopazEngine();
engine.Options.NoUndefined = true;
engine.Options.UseThreadSafeJsObjects = useThreadSafeJsObjects;
engine.AddType<DateTime>("DateTime");
dynamic model = new JsObject();
engine.SetValue("model", model);
engine.ExecuteScript(@"
var a = {
nested: {
n1: 1,
n2: 2,
n3 : 3
}
a1: 1
'a2': 2
}
a.a3 = 3
a[new DateTime()] = 4
a[null] = 5
model.js = a
model.p1 = a.p1
");
var js = model.js;
var json = JsonSerializer.Serialize((object)js);
Console.WriteLine(json);
dynamic deserialized;
if (useThreadSafeJsObjects)
{
deserialized = JsonSerializer.Deserialize<ConcurrentJsObject>(json);
var keys = deserialized.Keys;
var values = deserialized.Values;
Assert.AreEqual(6, keys.Count);
Assert.AreEqual(6, values.Count);
Assert.AreEqual(js, deserialized);
}
else
{
deserialized = JsonSerializer.Deserialize<JsObject>(json);
var keys = deserialized.Keys;
var values = deserialized.Values;
Assert.AreEqual(6, keys.Count);
Assert.AreEqual(6, values.Count);
Assert.AreEqual(js, deserialized);
}
Assert.AreEqual(1, js.a1);
Assert.AreEqual(2, js.a2);
Assert.AreEqual(3, js.a3);
Assert.AreEqual(4, js[new DateTime()]);
Assert.AreEqual(5, js[null]);
Assert.IsNull(model.p1);
}
[TestCase]
public void TestInQuery()
{
var engine = new TopazEngine();
engine.ExecuteScript("let obj = { a: { b: '123' }}");
Assert.That(engine.ExecuteExpression("'b' in obj.a"), Is.True);
Assert.That(engine.ExecuteExpression("obj.a.Contains('b')"), Is.True);
Assert.That(engine.ExecuteExpression("obj.a.hasOwn('b')"), Is.True);
Assert.That(engine.ExecuteExpression("obj.a.hasOwnProperty('b')"), Is.True);
Assert.That(engine.ExecuteExpression("'c' in obj.a"), Is.False);
Assert.That(engine.ExecuteExpression("obj.a.Contains('c')"), Is.False);
Assert.That(engine.ExecuteExpression("obj.a.hasOwn('c')"), Is.False);
Assert.That(engine.ExecuteExpression("obj.a.hasOwnProperty('c')"), Is.False);
}
}