Browse Source

New IObjectConverted unit test

Sebastien Ros 9 years ago
parent
commit
048a8895d7

+ 1 - 0
Jint.Tests/Jint.Tests.csproj

@@ -61,6 +61,7 @@
   <ItemGroup>
     <Compile Include="Parser\JavascriptParserTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Runtime\Converters\EnumsToStringConverter.cs" />
     <Compile Include="Runtime\Converters\NegateBoolConverter.cs" />
     <Compile Include="Runtime\Domain\A.cs" />
     <Compile Include="Runtime\Domain\ArrayConverterTestClass.cs" />

+ 21 - 0
Jint.Tests/Runtime/Converters/EnumsToStringConverter.cs

@@ -0,0 +1,21 @@
+using Jint.Native;
+using Jint.Runtime.Interop;
+using System;
+
+namespace Jint.Tests.Runtime.Converters
+{
+    public class EnumsToStringConverter : IObjectConverter
+    {
+        public bool TryConvert(object value, out JsValue result)
+        {
+            if (value is Enum)
+            {
+                result = value.ToString();
+                return true;
+            }
+
+            result = JsValue.Null;
+            return false;
+        }
+    }
+}

+ 11 - 0
Jint.Tests/Runtime/InteropTests.cs

@@ -953,6 +953,17 @@ namespace Jint.Tests.Runtime
 
         }
 
+        [Fact]
+        public void CanConvertEnumsToString()
+        {
+            var engine1 = new Engine(o => o.AddObjectConverter(new EnumsToStringConverter()))
+                .SetValue("assert", new Action<bool>(Assert.True));
+            engine1.SetValue("p", new { Comparison = StringComparison.CurrentCulture });
+            engine1.Execute("assert(p.Comparison === 'CurrentCulture');");
+            engine1.Execute("var result = p.Comparison;");
+            Assert.Equal("CurrentCulture", (string)engine1.GetValue("result").ToObject());
+        }
+
         [Fact]
         public void CanUserIncrementOperator()
         {