Skip to content

Commit ed1f081

Browse files
committed
In JavaScriptEngineSwitcher.NiL added support of the EmbedHostType method
1 parent 4cb448a commit ed1f081

File tree

4 files changed

+53
-105
lines changed

4 files changed

+53
-105
lines changed

JavaScriptEngineSwitcher.NoSamples.sln

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.Ch
7575
EndProject
7676
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.Vroom", "src\JavaScriptEngineSwitcher.Vroom\JavaScriptEngineSwitcher.Vroom.csproj", "{238D7E69-7052-4DFC-83EF-79D3D124C12B}"
7777
EndProject
78-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.NiL", "src\JavaScriptEngineSwitcher.NiL\JavaScriptEngineSwitcher.NiL.csproj", "{4BD3D648-A33B-4D4D-9C10-7FAA9C3FDFAD}"
78+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.NiL", "src\JavaScriptEngineSwitcher.NiL\JavaScriptEngineSwitcher.NiL.csproj", "{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}"
7979
EndProject
8080
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.Tests", "test\JavaScriptEngineSwitcher.Tests\JavaScriptEngineSwitcher.Tests.csproj", "{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}"
8181
EndProject
@@ -149,10 +149,10 @@ Global
149149
{238D7E69-7052-4DFC-83EF-79D3D124C12B}.Debug|Any CPU.Build.0 = Debug|Any CPU
150150
{238D7E69-7052-4DFC-83EF-79D3D124C12B}.Release|Any CPU.ActiveCfg = Release|Any CPU
151151
{238D7E69-7052-4DFC-83EF-79D3D124C12B}.Release|Any CPU.Build.0 = Release|Any CPU
152-
{4BD3D648-A33B-4D4D-9C10-7FAA9C3FDFAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
153-
{4BD3D648-A33B-4D4D-9C10-7FAA9C3FDFAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
154-
{4BD3D648-A33B-4D4D-9C10-7FAA9C3FDFAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
155-
{4BD3D648-A33B-4D4D-9C10-7FAA9C3FDFAD}.Release|Any CPU.Build.0 = Release|Any CPU
152+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
153+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Debug|Any CPU.Build.0 = Debug|Any CPU
154+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Release|Any CPU.ActiveCfg = Release|Any CPU
155+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Release|Any CPU.Build.0 = Release|Any CPU
156156
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
157157
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
158158
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -179,7 +179,7 @@ Global
179179
{893590AC-3D31-4DC8-A1B9-822BCC983A46} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
180180
{E14C4086-9877-4658-AE39-6313039A9076} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
181181
{238D7E69-7052-4DFC-83EF-79D3D124C12B} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
182-
{4BD3D648-A33B-4D4D-9C10-7FAA9C3FDFAD} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
182+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
183183
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF} = {53B43213-2E66-42C2-8476-600A2FD2DA75}
184184
EndGlobalSection
185185
GlobalSection(ExtensibilityGlobals) = postSolution

JavaScriptEngineSwitcher.sln

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{53B43213-2
3838
EndProject
3939
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharedFiles", "SharedFiles", "{958A803E-3A62-4E29-9866-9DCE451943BC}"
4040
ProjectSection(SolutionItems) = preProject
41+
test\SharedFiles\declinationOfMinutes.js = test\SharedFiles\declinationOfMinutes.js
4142
test\SharedFiles\link.txt = test\SharedFiles\link.txt
4243
test\SharedFiles\square.js = test\SharedFiles\square.js
4344
EndProjectSection
@@ -170,6 +171,10 @@ Global
170171
{238D7E69-7052-4DFC-83EF-79D3D124C12B}.Debug|Any CPU.Build.0 = Debug|Any CPU
171172
{238D7E69-7052-4DFC-83EF-79D3D124C12B}.Release|Any CPU.ActiveCfg = Release|Any CPU
172173
{238D7E69-7052-4DFC-83EF-79D3D124C12B}.Release|Any CPU.Build.0 = Release|Any CPU
174+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
175+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Debug|Any CPU.Build.0 = Debug|Any CPU
176+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Release|Any CPU.ActiveCfg = Release|Any CPU
177+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Release|Any CPU.Build.0 = Release|Any CPU
173178
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
174179
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
175180
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -198,10 +203,6 @@ Global
198203
{0342791E-6390-4F97-9163-5CE02E4CFF07}.Debug|Any CPU.Build.0 = Debug|Any CPU
199204
{0342791E-6390-4F97-9163-5CE02E4CFF07}.Release|Any CPU.ActiveCfg = Release|Any CPU
200205
{0342791E-6390-4F97-9163-5CE02E4CFF07}.Release|Any CPU.Build.0 = Release|Any CPU
201-
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
202-
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Debug|Any CPU.Build.0 = Debug|Any CPU
203-
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Release|Any CPU.ActiveCfg = Release|Any CPU
204-
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419}.Release|Any CPU.Build.0 = Release|Any CPU
205206
EndGlobalSection
206207
GlobalSection(SolutionProperties) = preSolution
207208
HideSolutionNode = FALSE
@@ -226,14 +227,14 @@ Global
226227
{893590AC-3D31-4DC8-A1B9-822BCC983A46} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
227228
{E14C4086-9877-4658-AE39-6313039A9076} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
228229
{238D7E69-7052-4DFC-83EF-79D3D124C12B} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
230+
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
229231
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF} = {53B43213-2E66-42C2-8476-600A2FD2DA75}
230232
{62F0C0AD-15BC-42CE-9BD2-49F506FEAA54} = {E5989CB5-AACE-4D35-A8EE-26942F140DA3}
231233
{C434E1B5-0463-4E58-8336-87F822D07B41} = {E5989CB5-AACE-4D35-A8EE-26942F140DA3}
232234
{8124DF18-4A0B-4648-8B90-4A6D3E4EF2F3} = {E5989CB5-AACE-4D35-A8EE-26942F140DA3}
233235
{C790AD7F-55C6-4106-8D8C-8F901B7FF245} = {E5989CB5-AACE-4D35-A8EE-26942F140DA3}
234236
{5CA92021-B75A-40AF-B5AA-500BAF76B4D6} = {E5989CB5-AACE-4D35-A8EE-26942F140DA3}
235237
{0342791E-6390-4F97-9163-5CE02E4CFF07} = {E5989CB5-AACE-4D35-A8EE-26942F140DA3}
236-
{F0BF7975-2E8A-4EC8-8DAA-760A4302F419} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
237238
EndGlobalSection
238239
GlobalSection(ExtensibilityGlobals) = postSolution
239240
SolutionGuid = {8184BE59-ACBC-4CD1-9419-D59A0FAC6131}

src/JavaScriptEngineSwitcher.NiL/NiLJsEngine.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,24 @@ protected override void InnerEmbedHostObject(string itemName, object value)
482482

483483
protected override void InnerEmbedHostType(string itemName, Type type)
484484
{
485-
throw new NotSupportedException();
485+
try
486+
{
487+
lock (_synchronizer)
488+
{
489+
OriginalValue processedValue = _jsContext.GlobalContext.GetConstructor(type);
490+
491+
OriginalValue variableValue = _jsContext.GetVariable(itemName);
492+
if (variableValue.ValueType == OriginalValueType.NotExists)
493+
{
494+
variableValue = _jsContext.DefineVariable(itemName, true);
495+
}
496+
variableValue.Assign(processedValue);
497+
}
498+
}
499+
catch (OriginalException e)
500+
{
501+
throw WrapJsException(e);
502+
}
486503
}
487504

488505
protected override void InnerInterrupt()

test/JavaScriptEngineSwitcher.Tests/NiL/InteropTests.cs

Lines changed: 23 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Xunit;
1+
using System;
2+
3+
using Xunit;
24

35
namespace JavaScriptEngineSwitcher.Tests.NiL
46
{
@@ -12,107 +14,35 @@ protected override string EngineName
1214

1315
#region Embedding of types
1416

15-
#region Creating of instances
16-
17-
[Fact]
18-
public override void CreatingAnInstanceOfEmbeddedBuiltinValueTypeIsCorrect()
19-
{ }
20-
21-
[Fact]
22-
public override void CreatingAnInstanceOfEmbeddedBuiltinReferenceTypeIsCorrect()
23-
{ }
24-
25-
[Fact]
26-
public override void CreatingAnInstanceOfEmbeddedCustomValueTypeIsCorrect()
27-
{ }
28-
29-
[Fact]
30-
public override void CreatingAnInstanceOfEmbeddedCustomReferenceTypeIsCorrect()
31-
{ }
32-
33-
#endregion
34-
35-
#region Types with constants
36-
37-
[Fact]
38-
public override void EmbeddingOfBuiltinReferenceTypeWithConstantsIsCorrect()
39-
{ }
40-
41-
[Fact]
42-
public override void EmbeddingOfCustomValueTypeWithConstantsIsCorrect()
43-
{ }
44-
45-
[Fact]
46-
public override void EmbeddingOfCustomReferenceTypeWithConstantIsCorrect()
47-
{ }
48-
49-
#endregion
50-
51-
#region Types with fields
52-
53-
[Fact]
54-
public override void EmbeddingOfBuiltinValueTypeWithFieldIsCorrect()
55-
{ }
56-
57-
[Fact]
58-
public override void EmbeddingOfBuiltinReferenceTypeWithFieldIsCorrect()
59-
{ }
60-
61-
[Fact]
62-
public override void EmbeddingOfCustomValueTypeWithFieldIsCorrect()
63-
{ }
64-
65-
[Fact]
66-
public override void EmbeddingOfCustomReferenceTypeWithFieldIsCorrect()
67-
{ }
68-
69-
#endregion
70-
71-
#region Types with properties
72-
73-
[Fact]
74-
public override void EmbeddingOfBuiltinValueTypeWithPropertyIsCorrect()
75-
{ }
76-
77-
[Fact]
78-
public override void EmbeddingOfBuiltinReferenceTypeWithPropertyIsCorrect()
79-
{ }
80-
81-
[Fact]
82-
public override void EmbeddingOfCustomValueTypeWithPropertyIsCorrect()
83-
{ }
84-
85-
[Fact]
86-
public override void EmbeddingOfCustomReferenceTypeWithPropertyIsCorrect()
87-
{ }
88-
89-
#endregion
90-
9117
#region Types with methods
9218

93-
[Fact]
94-
public override void EmbeddingOfBuiltinValueTypeWithMethodIsCorrect()
95-
{ }
96-
9719
[Fact]
9820
public override void EmbeddingOfBuiltinReferenceTypeWithMethodsIsCorrect()
99-
{ }
21+
{
22+
// Arrange
23+
Type mathType = typeof(Math);
10024

101-
[Fact]
102-
public override void EmbeddingOfCustomValueTypeWithMethodIsCorrect()
103-
{ }
25+
const string input1 = "Math2.Max(5.37, 5.56)";
26+
const double targetOutput1 = 5.56;
10427

105-
[Fact]
106-
public override void EmbeddingOfCustomReferenceTypeWithMethodIsCorrect()
107-
{ }
28+
const string input2 = "Math2.Log10(23)";
29+
const double targetOutput2 = 1.36172783601759;
10830

109-
#endregion
31+
// Act
32+
double output1;
33+
double output2;
11034

111-
#region Removal
35+
using (var jsEngine = CreateJsEngine())
36+
{
37+
jsEngine.EmbedHostType("Math2", mathType);
38+
output1 = Math.Round(jsEngine.Evaluate<double>(input1), 2);
39+
output2 = Math.Round(jsEngine.Evaluate<double>(input2), 14);
40+
}
11241

113-
[Fact]
114-
public override void RemovingOfEmbeddedCustomReferenceTypeIsCorrect()
115-
{ }
42+
// Assert
43+
Assert.Equal(targetOutput1, output1);
44+
Assert.Equal(targetOutput2, output2);
45+
}
11646

11747
#endregion
11848

0 commit comments

Comments
 (0)