Skip to content

Commit 4953fe1

Browse files
committed
Fixed a error, that occurred in the Classic mode during removing the embedded host objects and types
1 parent 8652470 commit 4953fe1

File tree

6 files changed

+98
-10
lines changed

6 files changed

+98
-10
lines changed

src/MsieJavaScriptEngine/ActiveScript/ActiveScriptJsEngineBase.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ internal abstract partial class ActiveScriptJsEngineBase : InnerJsEngineBase
3232
/// <summary>
3333
/// List of host items
3434
/// </summary>
35-
private readonly Dictionary<string, object> _hostItems = new Dictionary<string, object>();
35+
protected readonly Dictionary<string, object> _hostItems = new Dictionary<string, object>();
3636

3737
/// <summary>
3838
/// Last Active Script exception
@@ -403,7 +403,7 @@ private object InnerGetVariableValue(string variableName)
403403
/// </summary>
404404
/// <param name="variableName">Name of variable</param>
405405
/// <param name="value">Value of variable</param>
406-
private void InnerSetVariableValue(string variableName, object value)
406+
protected void InnerSetVariableValue(string variableName, object value)
407407
{
408408
object[] args = { value };
409409

@@ -425,6 +425,12 @@ private void InnerSetVariableValue(string variableName, object value)
425425
}
426426
}
427427

428+
/// <summary>
429+
/// Removes a variable
430+
/// </summary>
431+
/// <param name="variableName">Name of variable</param>
432+
protected abstract void InnerRemoveVariable(string variableName);
433+
428434
private void InnerEmbedHostItem(string itemName, object value)
429435
{
430436
object oldValue = null;
@@ -719,12 +725,7 @@ public override void RemoveVariable(string variableName)
719725

720726
try
721727
{
722-
InnerSetVariableValue(variableName, null);
723-
724-
if (_hostItems.ContainsKey(variableName))
725-
{
726-
_hostItems.Remove(variableName);
727-
}
728+
InnerRemoveVariable(variableName);
728729
}
729730
catch (ActiveScriptException e)
730731
{

src/MsieJavaScriptEngine/ActiveScript/ChakraActiveScriptJsEngine.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,16 @@ protected override void InitScriptContext()
5858
_interruptRequested = false;
5959
}
6060

61+
protected override void InnerRemoveVariable(string variableName)
62+
{
63+
InnerSetVariableValue(variableName, null);
64+
65+
if (_hostItems.ContainsKey(variableName))
66+
{
67+
_hostItems.Remove(variableName);
68+
}
69+
}
70+
6171
#region IInnerJsEngine implementation
6272

6373
public override void Interrupt()

src/MsieJavaScriptEngine/ActiveScript/ClassicActiveScriptJsEngine.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,18 @@ protected override ScriptSiteBase CreateScriptSite()
118118
return new ScriptSite(this);
119119
}
120120

121+
protected override void InnerRemoveVariable(string variableName)
122+
{
123+
if (_hostItems.ContainsKey(variableName))
124+
{
125+
_hostItems.Remove(variableName);
126+
}
127+
else
128+
{
129+
InnerSetVariableValue(variableName, null);
130+
}
131+
}
132+
121133
#region IInnerJsEngine implementation
122134

123135
public override void Interrupt()

src/MsieJavaScriptEngine/MsieJavaScriptEngine.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
<RepositoryUrl>https://github.com/Taritsyn/MsieJavaScriptEngine</RepositoryUrl>
2525
<RepositoryType>git</RepositoryType>
2626
<PackageTags>JavaScript;ECMAScript;MSIE;IE;Edge;Chakra</PackageTags>
27-
<PackageReleaseNotes>Added support of .NET Standard 2.0.</PackageReleaseNotes>
27+
<PackageReleaseNotes>1. Added support of .NET Standard 2.0;
28+
2. Fixed a error, that occurred in the `Classic` mode during removing the embedded host objects and types.</PackageReleaseNotes>
2829
<NeutralLanguage>en-US</NeutralLanguage>
2930
<PackageOutputPath>../../nuget</PackageOutputPath>
3031
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

src/MsieJavaScriptEngine/readme.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
=============
2222
RELEASE NOTES
2323
=============
24-
Added support of .NET Standard 2.0.
24+
1. Added support of .NET Standard 2.0;
25+
2. Fixed a error, that occurred in the `Classic` mode during removing the
26+
embedded host objects and types.
2527

2628
============
2729
PROJECT SITE

test/MsieJavaScriptEngine.Test.Common/InteropTestsBase.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,37 @@ public virtual void InteractionOfEmbeddedCustomValueTypeAndDelegateInstancesIsCo
593593

594594
#endregion
595595

596+
#region Removal
597+
598+
[Test]
599+
public virtual void RemovingOfEmbeddedInstanceOfCustomReferenceTypeIsCorrect()
600+
{
601+
// Arrange
602+
var person = new Person("Vasya", "Pupkin");
603+
604+
// Act
605+
Exception currentException = null;
606+
607+
using (var jsEngine = CreateJsEngine())
608+
{
609+
jsEngine.EmbedHostObject("person", person);
610+
611+
try
612+
{
613+
jsEngine.RemoveVariable("person");
614+
}
615+
catch (Exception e)
616+
{
617+
currentException = e;
618+
}
619+
}
620+
621+
// Assert
622+
Assert.Null(currentException);
623+
}
624+
625+
#endregion
626+
596627
#endregion
597628

598629

@@ -1080,6 +1111,37 @@ public virtual void EmbeddingOfCustomReferenceTypeWithMethodIsCorrect()
10801111

10811112
#endregion
10821113

1114+
#region Removal
1115+
1116+
[Test]
1117+
public virtual void RemovingOfEmbeddedCustomReferenceTypeIsCorrect()
1118+
{
1119+
// Arrange
1120+
Type personType = typeof(Person);
1121+
1122+
// Act
1123+
Exception currentException = null;
1124+
1125+
using (var jsEngine = CreateJsEngine())
1126+
{
1127+
jsEngine.EmbedHostType("Person", personType);
1128+
1129+
try
1130+
{
1131+
jsEngine.RemoveVariable("Person");
1132+
}
1133+
catch (Exception e)
1134+
{
1135+
currentException = e;
1136+
}
1137+
}
1138+
1139+
// Assert
1140+
Assert.Null(currentException);
1141+
}
1142+
1143+
#endregion
1144+
10831145
#endregion
10841146
}
10851147
}

0 commit comments

Comments
 (0)