Skip to content

Commit b778437

Browse files
committed
In JavaScriptEngineSwitcher.Msie added support of MSIE JavaScript Engine version 3.0.1
1 parent ebe733a commit b778437

File tree

11 files changed

+225
-85
lines changed

11 files changed

+225
-85
lines changed

src/JavaScriptEngineSwitcher.Msie/JavaScriptEngineSwitcher.Msie.csproj

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@
1313
<Description>JavaScriptEngineSwitcher.Msie contains adapter `MsieJsEngine` (wrapper for the MSIE JavaScript Engine for .Net (http://github.com/Taritsyn/MsieJavaScriptEngine)). For correct working of the MSIE JavaScript Engine it is recommended to install Internet Explorer 9+ or Microsoft Edge on the machine.</Description>
1414
<PackageIconUrl>https://raw.githubusercontent.com/Taritsyn/JavaScriptEngineSwitcher/master/Icons/JavaScriptEngineSwitcher_Msie_Logo128x128.png</PackageIconUrl>
1515
<PackageTags>JavaScriptEngineSwitcher;JavaScript;ECMAScript;MSIE;IE;Chakra</PackageTags>
16-
<PackageReleaseNotes>1. MSIE JavaScript Engine was updated to version 3.0.0;
17-
2. Added a ability to interrupt execution of the script;
18-
3. Added a ability to pre-compile scripts;
19-
4. In configuration settings of the MSIE JS engine was added one new property - `MaxStackSize` (default `492` or `984` KB);
20-
5. Added support of .NET Standard 2.0.</PackageReleaseNotes>
16+
<PackageReleaseNotes>MSIE JavaScript Engine was updated to version 3.0.1.</PackageReleaseNotes>
2117
</PropertyGroup>
2218

2319
<Import Project="../../build/common.props" />
@@ -26,7 +22,7 @@
2622
<Import Project="../../build/nuget-metadata.props" />
2723

2824
<ItemGroup>
29-
<PackageReference Include="MsieJavaScriptEngine" Version="3.0.0" />
25+
<PackageReference Include="MsieJavaScriptEngine" Version="3.0.1" />
3026
<PackageReference Include="ResxToCs.MSBuild" Version="1.0.0-alpha6" PrivateAssets="All" />
3127

3228
<ProjectReference Include="../JavaScriptEngineSwitcher.Core/JavaScriptEngineSwitcher.Core.csproj" />

src/JavaScriptEngineSwitcher.Msie/readme.txt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
--------------------------------------------------------------------------------
77

8-
Copyright (c) 2013-2018 Andrey Taritsyn - http://www.taritsyn.ru
8+
Copyright (c) 2013-2019 Andrey Taritsyn - http://www.taritsyn.ru
99

1010

1111
===========
@@ -19,12 +19,7 @@
1919
=============
2020
RELEASE NOTES
2121
=============
22-
1. MSIE JavaScript Engine was updated to version 3.0.0;
23-
2. Added a ability to interrupt execution of the script;
24-
3. Added a ability to pre-compile scripts;
25-
4. In configuration settings of the MSIE JS engine was added one new property -
26-
`MaxStackSize` (default `492` or `984` KB);
27-
5. Added support of .NET Standard 2.0.
22+
MSIE JavaScript Engine was updated to version 3.0.1.
2823

2924
=============
3025
DOCUMENTATION

test/JavaScriptEngineSwitcher.Benchmarks/HostObjectsEmbeddingBenchmark.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,15 @@ public void Jurassic()
122122
}
123123
#if NET46
124124

125-
//[Benchmark]
126-
//public void MsieClassic()
127-
//{
128-
// Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
129-
// {
130-
// EngineMode = JsEngineMode.Classic
131-
// });
132-
// EmbedAndUseHostObjects(createJsEngine);
133-
//}
125+
[Benchmark]
126+
public void MsieClassic()
127+
{
128+
Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
129+
{
130+
EngineMode = JsEngineMode.Classic
131+
});
132+
EmbedAndUseHostObjects(createJsEngine);
133+
}
134134

135135
[Benchmark]
136136
public void MsieChakraActiveScript()

test/JavaScriptEngineSwitcher.Benchmarks/HostTypesEmbeddingBenchmark.cs

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
using JavaScriptEngineSwitcher.Core;
1010
using JavaScriptEngineSwitcher.Jint;
1111
using JavaScriptEngineSwitcher.Jurassic;
12-
//using JavaScriptEngineSwitcher.Msie;
12+
using JavaScriptEngineSwitcher.Msie;
1313
using JavaScriptEngineSwitcher.NiL;
1414
#if NET46
1515
using JavaScriptEngineSwitcher.V8;
@@ -100,47 +100,47 @@ public void Jurassic()
100100
Func<IJsEngine> createJsEngine = () => new JurassicJsEngine();
101101
EmbedAndUseHostTypes(createJsEngine);
102102
}
103-
//#if NET46
104-
105-
// [Benchmark]
106-
// public void MsieClassic()
107-
// {
108-
// Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
109-
// {
110-
// EngineMode = JsEngineMode.Classic
111-
// });
112-
// EmbedAndUseHostTypes(createJsEngine);
113-
// }
114-
115-
// [Benchmark]
116-
// public void MsieChakraActiveScript()
117-
// {
118-
// Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
119-
// {
120-
// EngineMode = JsEngineMode.ChakraActiveScript
121-
// });
122-
// EmbedAndUseHostTypes(createJsEngine);
123-
// }
124-
//#endif
125-
//[Benchmark]
126-
//public void MsieChakraIeJsRt()
127-
//{
128-
// Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
129-
// {
130-
// EngineMode = JsEngineMode.ChakraIeJsRt
131-
// });
132-
// EmbedAndUseHostTypes(createJsEngine);
133-
//}
134-
135-
//[Benchmark]
136-
//public void MsieChakraEdgeJsRt()
137-
//{
138-
// Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
139-
// {
140-
// EngineMode = JsEngineMode.ChakraEdgeJsRt
141-
// });
142-
// EmbedAndUseHostTypes(createJsEngine);
143-
//}
103+
#if NET46
104+
105+
[Benchmark]
106+
public void MsieClassic()
107+
{
108+
Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
109+
{
110+
EngineMode = JsEngineMode.Classic
111+
});
112+
EmbedAndUseHostTypes(createJsEngine);
113+
}
114+
115+
[Benchmark]
116+
public void MsieChakraActiveScript()
117+
{
118+
Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
119+
{
120+
EngineMode = JsEngineMode.ChakraActiveScript
121+
});
122+
EmbedAndUseHostTypes(createJsEngine);
123+
}
124+
#endif
125+
[Benchmark]
126+
public void MsieChakraIeJsRt()
127+
{
128+
Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
129+
{
130+
EngineMode = JsEngineMode.ChakraIeJsRt
131+
});
132+
EmbedAndUseHostTypes(createJsEngine);
133+
}
134+
135+
[Benchmark]
136+
public void MsieChakraEdgeJsRt()
137+
{
138+
Func<IJsEngine> createJsEngine = () => new MsieJsEngine(new MsieSettings
139+
{
140+
EngineMode = JsEngineMode.ChakraEdgeJsRt
141+
});
142+
EmbedAndUseHostTypes(createJsEngine);
143+
}
144144

145145
[Benchmark]
146146
public void NiL()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace JavaScriptEngineSwitcher.Tests.Interop.Logging
2+
{
3+
public class DefaultLogger
4+
{
5+
public static ILogger Current = new NullLogger();
6+
}
7+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace JavaScriptEngineSwitcher.Tests.Interop.Logging
2+
{
3+
public interface ILogger
4+
{
5+
void Error(string category, string message,
6+
string filePath = "", int lineNumber = 0, int columnNumber = 0,
7+
string sourceFragment = "");
8+
9+
void Warn(string category, string message,
10+
string filePath = "", int lineNumber = 0, int columnNumber = 0,
11+
string sourceFragment = "");
12+
13+
void Debug(string category, string message, string filePath = "");
14+
15+
void Info(string category, string message, string filePath = "");
16+
}
17+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
namespace JavaScriptEngineSwitcher.Tests.Interop.Logging
2+
{
3+
public sealed class NullLogger : ILogger
4+
{
5+
public void Error(string category, string message,
6+
string filePath = "", int lineNumber = 0, int columnNumber = 0,
7+
string sourceFragment = "")
8+
{ }
9+
10+
public void Warn(string category, string message,
11+
string filePath = "", int lineNumber = 0, int columnNumber = 0,
12+
string sourceFragment = "")
13+
{ }
14+
15+
public void Debug(string category, string message, string filePath = "")
16+
{ }
17+
18+
public void Info(string category, string message, string filePath = "")
19+
{ }
20+
21+
public override string ToString()
22+
{
23+
return "[null logger]";
24+
}
25+
}
26+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
using System;
2+
using System.Text;
3+
4+
namespace JavaScriptEngineSwitcher.Tests.Interop.Logging
5+
{
6+
public sealed class ThrowExceptionLogger : ILogger
7+
{
8+
public void Error(string category, string message, string filePath = "",
9+
int lineNumber = 0, int columnNumber = 0, string sourceFragment = "")
10+
{
11+
var errorBuilder = new StringBuilder();
12+
errorBuilder.AppendLine("Category: " + category);
13+
errorBuilder.AppendLine("Message: " + message);
14+
15+
if (!string.IsNullOrWhiteSpace(filePath))
16+
{
17+
errorBuilder.AppendLine("File: " + filePath);
18+
}
19+
20+
if (lineNumber > 0)
21+
{
22+
errorBuilder.AppendLine("Line number: " + lineNumber);
23+
}
24+
25+
if (columnNumber > 0)
26+
{
27+
errorBuilder.AppendLine("Column number: " + columnNumber);
28+
}
29+
30+
if (!string.IsNullOrWhiteSpace(sourceFragment))
31+
{
32+
errorBuilder.AppendLine("Source fragment:" + Environment.NewLine + sourceFragment);
33+
}
34+
35+
string errorMessage = errorBuilder.ToString();
36+
errorBuilder.Clear();
37+
38+
throw new InvalidOperationException(errorMessage);
39+
}
40+
41+
public void Warn(string category, string message,
42+
string filePath = "", int lineNumber = 0, int columnNumber = 0,
43+
string sourceFragment = "")
44+
{ }
45+
46+
public void Debug(string category, string message, string filePath = "")
47+
{ }
48+
49+
public void Info(string category, string message, string filePath = "")
50+
{ }
51+
52+
public override string ToString()
53+
{
54+
return "[throw exception logger]";
55+
}
56+
}
57+
}

test/JavaScriptEngineSwitcher.Tests/Interop/SimpleSingleton.cs

Lines changed: 0 additions & 17 deletions
This file was deleted.

test/JavaScriptEngineSwitcher.Tests/InteropTestsBase.cs

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#endif
66
using System.IO;
77
using System.Linq;
8+
using System.Text;
89

910
using Xunit;
1011

@@ -13,6 +14,7 @@
1314
#if NETCOREAPP1_0
1415
using JavaScriptEngineSwitcher.Tests.Interop.Drawing;
1516
#endif
17+
using JavaScriptEngineSwitcher.Tests.Interop.Logging;
1618

1719
namespace JavaScriptEngineSwitcher.Tests
1820
{
@@ -537,6 +539,52 @@ public virtual void EmbeddingOfInstanceOfDelegateWithTwoParametersIsCorrect()
537539
Assert.Equal(targetOutput, output);
538540
}
539541

542+
[Fact]
543+
public virtual void EmbeddingOfInstanceOfDelegateWithoutResultIsCorrect()
544+
{
545+
// Arrange
546+
var logBuilder = new StringBuilder();
547+
Action<string> log = (string value) =>
548+
{
549+
logBuilder.AppendLine(value);
550+
};
551+
552+
const string input = @"(function(log, undefined) {
553+
var num = 2, count = 0;
554+
555+
log('-= Start code execution =-');
556+
557+
while (num != Infinity) {
558+
num = num * num;
559+
count++;
560+
}
561+
562+
log('-= End of code execution =-');
563+
564+
return count;
565+
}(log));";
566+
const int targetOutput = 10;
567+
string targetLogOutput = "-= Start code execution =-" + Environment.NewLine +
568+
"-= End of code execution =-" + Environment.NewLine;
569+
570+
// Act
571+
int output;
572+
string logOutput;
573+
574+
using (var jsEngine = CreateJsEngine())
575+
{
576+
jsEngine.EmbedHostObject("log", log);
577+
output = jsEngine.Evaluate<int>(input);
578+
579+
logOutput = logBuilder.ToString();
580+
logBuilder.Clear();
581+
}
582+
583+
// Assert
584+
Assert.Equal(targetOutput, output);
585+
Assert.Equal(targetLogOutput, logOutput);
586+
}
587+
540588
#endregion
541589

542590
#region Removal
@@ -833,17 +881,22 @@ public virtual void EmbeddingOfCustomValueTypeWithFieldIsCorrect()
833881
public virtual void EmbeddingOfCustomReferenceTypeWithFieldIsCorrect()
834882
{
835883
// Arrange
836-
Type simpleSingletonType = typeof(SimpleSingleton);
884+
Type defaultLoggerType = typeof(DefaultLogger);
885+
Type throwExceptionLoggerType = typeof(ThrowExceptionLogger);
886+
const string updateCode = "DefaultLogger.Current = new ThrowExceptionLogger();";
837887

838-
const string input = "SimpleSingleton.Instance.ToString()";
839-
const string targetOutput = "[simple singleton]";
888+
const string input = "DefaultLogger.Current.ToString()";
889+
const string targetOutput = "[throw exception logger]";
840890

841891
// Act
842892
string output;
843893

844894
using (var jsEngine = CreateJsEngine())
845895
{
846-
jsEngine.EmbedHostType("SimpleSingleton", simpleSingletonType);
896+
jsEngine.EmbedHostType("DefaultLogger", defaultLoggerType);
897+
jsEngine.EmbedHostType("ThrowExceptionLogger", throwExceptionLoggerType);
898+
jsEngine.Execute(updateCode);
899+
847900
output = jsEngine.Evaluate<string>(input);
848901
}
849902

0 commit comments

Comments
 (0)