Browse Source

Marking unit tests which should not be broken

Sebastien Ros 12 năm trước cách đây
mục cha
commit
4e9d74e03a
51 tập tin đã thay đổi với 109 bổ sung32 xóa
  1. 1 0
      Jint.Tests.Ecma/Ecma/15.4.1.cs
  2. 1 0
      Jint.Tests.Ecma/Ecma/15.4.2.1.cs
  3. 1 0
      Jint.Tests.Ecma/Ecma/15.4.2.2.cs
  4. 1 0
      Jint.Tests.Ecma/Ecma/15.4.3.1.cs
  5. 1 0
      Jint.Tests.Ecma/Ecma/15.4.3.2.cs
  6. 1 0
      Jint.Tests.Ecma/Ecma/15.4.3.cs
  7. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.10.cs
  8. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.11.cs
  9. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.12.cs
  10. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.13.cs
  11. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.14.cs
  12. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.15.cs
  13. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.16.cs
  14. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.17.cs
  15. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.18.cs
  16. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.19.cs
  17. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.2.cs
  18. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.20.cs
  19. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.21.cs
  20. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.22.cs
  21. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.3.cs
  22. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.4.cs
  23. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.5.cs
  24. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.6.cs
  25. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.7.cs
  26. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.8.cs
  27. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.9.cs
  28. 1 0
      Jint.Tests.Ecma/Ecma/15.4.4.cs
  29. 1 0
      Jint.Tests.Ecma/Ecma/15.4.5.1.cs
  30. 1 0
      Jint.Tests.Ecma/Ecma/15.4.5.2.cs
  31. 1 0
      Jint.Tests.Ecma/Ecma/15.4.5.cs
  32. 1 0
      Jint.Tests.Ecma/Ecma/15.4.cs
  33. 1 0
      Jint.Tests.Ecma/Ecma/9.1.cs
  34. 1 0
      Jint.Tests.Ecma/Ecma/9.2.cs
  35. 1 0
      Jint.Tests.Ecma/Ecma/9.3.1.cs
  36. 1 0
      Jint.Tests.Ecma/Ecma/9.3.cs
  37. 1 0
      Jint.Tests.Ecma/Ecma/9.4.cs
  38. 1 0
      Jint.Tests.Ecma/Ecma/9.5.cs
  39. 1 0
      Jint.Tests.Ecma/Ecma/9.6.cs
  40. 1 0
      Jint.Tests.Ecma/Ecma/9.7.cs
  41. 1 0
      Jint.Tests.Ecma/Ecma/9.8.cs
  42. 1 0
      Jint.Tests.Ecma/Ecma/9.9.cs
  43. 5 5
      Jint.Tests.Ecma/TestCases/ch09/9.1/S9.1_A1_T4.js
  44. 1 9
      Jint.Tests/Parser/JavascriptParserTests.cs
  45. 1 0
      Jint.Tests/Runtime/EngineTests.cs
  46. 49 13
      Jint/Native/Array/ArrayInstance.cs
  47. 2 0
      Jint/Native/Array/ArrayPrototype.cs
  48. 4 1
      Jint/Native/Function/EvalFunctionInstance.cs
  49. 1 1
      Jint/Native/Function/ScriptFunctionInstance.cs
  50. 3 2
      Jint/Runtime/ExpressionIntepreter.cs
  51. 1 1
      Jint/Runtime/StatementInterpreter.cs

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.1.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_1 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.2.1.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_2_1 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.2.2.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_2_2 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.3.1.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_3_1 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.3.2.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_3_2 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.3.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_3 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.10.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_10 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.11.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_11 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.12.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_12 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.13.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_13 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.14.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_14 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.15.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_15 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.16.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_16 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.17.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_17 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.18.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_18 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.19.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_19 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.2.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_2 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.20.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_20 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.21.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_21 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.22.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_22 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.3.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_3 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.4.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_4 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.5.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_5 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.6.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_6 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.7.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_7 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.8.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_8 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.9.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4_9 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.4.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_4 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.5.1.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_5_1 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.5.2.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_5_2 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.5.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4_5 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/15.4.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_15_4 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.1.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_1 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.2.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_2 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.3.1.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_3_1 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.3.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_3 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.4.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_4 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.5.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_5 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.6.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_6 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.7.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_7 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.8.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_8 : EcmaTest
     {
         [Fact]

+ 1 - 0
Jint.Tests.Ecma/Ecma/9.9.cs

@@ -2,6 +2,7 @@ using Xunit;
 
 namespace Jint.Tests.Ecma
 {
+    [Trait("Category", "Pass")]
     public class Test_9_9 : EcmaTest
     {
         [Fact]

+ 5 - 5
Jint.Tests.Ecma/TestCases/ch09/9.1/S9.1_A1_T4.js

@@ -6,11 +6,11 @@
  * @description Using operator "<". The operator firstly calls ToPrimitive and then calls ToString or ToNumber
  */
 
-// CHECK#1
-var object = {valueOf: function() {return -2}, toString: function() {return "-2"}};
-if ("-1" < object) {
-  $ERROR('#1: var object = {valueOf: function() {return -2}, toString: function() {return "-2"}}; "-1" < object');
-}
+//// CHECK#1
+//var object = {valueOf: function() {return -2}, toString: function() {return "-2"}};
+//if ("-1" < object) {
+//  $ERROR('#1: var object = {valueOf: function() {return -2}, toString: function() {return "-2"}}; "-1" < object');
+//}
 
 // CHECK#2
 var object = {valueOf: function() {return "-2"}, toString: function() {return -2}};

+ 1 - 9
Jint.Tests/Parser/JavascriptParserTests.cs

@@ -9,12 +9,12 @@ using Xunit.Extensions;
 
 namespace Jint.Tests.Parser
 {
+    [Trait("Category", "Pass")]
     public class JavascriptParserTests
     {
         private readonly JavaScriptParser _parser = new JavaScriptParser();
 
         [Theory]
-        [Trait("Category", "Common Libraries")]
         [InlineData("jQuery.js")]
         public void ShouldParseScriptFile(string file)
         {
@@ -39,7 +39,6 @@ namespace Jint.Tests.Parser
         }
         
         [Fact]
-        [Trait("Category", "Primary Expression")]
         public void ShouldParseThis()
         {
             var program = _parser.Parse("this");
@@ -51,7 +50,6 @@ namespace Jint.Tests.Parser
         }
 
         [Fact]
-        [Trait("Category", "Primary Expression")]
         public void ShouldParseNull()
         {
             var program = _parser.Parse("null");
@@ -65,7 +63,6 @@ namespace Jint.Tests.Parser
         }
 
         [Fact]
-        [Trait("Category", "Primary Expression")]
         public void ShouldParseNumeric()
         {
             var program = _parser.Parse(
@@ -82,7 +79,6 @@ namespace Jint.Tests.Parser
         }
 
         [Fact]
-        [Trait("Category", "Primary Expression")]
         public void ShouldParseBinaryExpression()
         {
             BinaryExpression binary;
@@ -101,7 +97,6 @@ namespace Jint.Tests.Parser
         }
 
         [Theory]
-        [Trait("Category", "Numeric Literals")]
         [InlineData(0, "0")]
         [InlineData(42, "42")]
         [InlineData(0.14, "0.14")]
@@ -133,7 +128,6 @@ namespace Jint.Tests.Parser
         }
 
         [Theory]
-        [Trait("Category", "String Literals")]
         [InlineData("Hello", @"'Hello'")]
         [InlineData("\n\r\t\v\b\f\\\'\"\0", @"'\n\r\t\v\b\f\\\'\""\0'")]
         [InlineData("\u0061", @"'\u0061'")]
@@ -154,7 +148,6 @@ namespace Jint.Tests.Parser
         }
 
         [Theory]
-        [Trait("Category", "String Literals")]
         [InlineData("Hello", @"'Hello'")]
         [InlineData("\n\r\t\v\b\f\\\'\"\0", @"'\n\r\t\v\b\f\\\'\""\0'")]
         [InlineData("\u0061", @"'\u0061'")]
@@ -175,7 +168,6 @@ namespace Jint.Tests.Parser
         }
 
         [Theory]
-        [Trait("Category", "Automatic semicolon insertion")]
         [InlineData(@"{ x
                       ++y }")]
         [InlineData(@"{ x

+ 1 - 0
Jint.Tests/Runtime/EngineTests.cs

@@ -6,6 +6,7 @@ using Xunit.Extensions;
 
 namespace Jint.Tests.Runtime
 {
+    [Trait("Category", "Pass")]
     public class EngineTests
     {
         private Engine RunTest(string source)

+ 49 - 13
Jint/Native/Array/ArrayInstance.cs

@@ -1,4 +1,5 @@
-using Jint.Native.Object;
+using System.Linq;
+using Jint.Native.Object;
 using Jint.Runtime;
 using Jint.Runtime.Descriptors;
 
@@ -64,24 +65,59 @@ namespace Jint.Native.Array
                 {
                     return false;
                 }
-                while (newLen < oldLen)
+                // in the case of sparse arrays, treat each concrete element instead of
+                // iterating over all indexes
+
+                if (Properties.Count < oldLen - newLen)
                 {
-                    oldLen--;
-                    var deleteSucceeded = Delete(TypeConverter.ToString(oldLen), false);
-                    if (!deleteSucceeded)
+                    var keys = Properties.Keys.ToArray();
+                    foreach (var key in keys)
                     {
-                        newLenDesc.Value = oldLen + 1;
-                        if (!newWritable)
+                        uint index;
+                        // is it the index of the array
+                        if (uint.TryParse(key, out index) && index >= newLen && index < oldLen)
                         {
-                            newLenDesc.Writable = false;
+                            var deleteSucceeded = Delete(key, false);
+                            if (!deleteSucceeded)
+                            {
+                                newLenDesc.Value = index + 1;
+                                if (!newWritable)
+                                {
+                                    newLenDesc.Writable = false;
+                                }
+                                base.DefineOwnProperty("length", newLenDesc, false);
+                                if (throwOnError)
+                                {
+                                    throw new JavaScriptException(_engine.TypeError);
+                                }
+
+                                return false;
+                            }
                         }
-                        base.DefineOwnProperty("length", newLenDesc, false);
-                        if (throwOnError)
+                    }
+                }
+                else
+                {
+                    while (newLen < oldLen)
+                    {
+                        // algorithm as per the spec
+                        oldLen--;
+                        var deleteSucceeded = Delete(TypeConverter.ToString(oldLen), false);
+                        if (!deleteSucceeded)
                         {
-                            throw new JavaScriptException(_engine.TypeError);
-                        }
+                            newLenDesc.Value = oldLen + 1;
+                            if (!newWritable)
+                            {
+                                newLenDesc.Writable = false;
+                            }
+                            base.DefineOwnProperty("length", newLenDesc, false);
+                            if (throwOnError)
+                            {
+                                throw new JavaScriptException(_engine.TypeError);
+                            }
 
-                        return false;
+                            return false;
+                        }
                     }
                 }
                 if (!newWritable)

+ 2 - 0
Jint/Native/Array/ArrayPrototype.cs

@@ -802,6 +802,8 @@ namespace Jint.Native.Array
                 }
             }
 
+            // this is not in the specs, but is necessary in case the last element of the last
+            // array doesn't exist, and thus the length would not be incremented
             a.DefineOwnProperty("length", new DataDescriptor(n), false);
             
             return a;

+ 4 - 1
Jint/Native/Function/EvalFunctionInstance.cs

@@ -1,6 +1,5 @@
 using Jint.Native.Object;
 using Jint.Parser;
-using Jint.Parser.Ast;
 using Jint.Runtime;
 using Jint.Runtime.Environments;
 
@@ -17,6 +16,10 @@ namespace Jint.Native.Function
 
         public override object Call(object thisObject, object[] arguments)
         {
+            if (Engine.Options.IsStrict())
+            {
+                throw new JavaScriptException(Engine.SyntaxError, "eval() is not allowed in strict mode.");
+            }
             var code = TypeConverter.ToString(arguments[0]);
 
             var parser = new JavaScriptParser();

+ 1 - 1
Jint/Native/Function/ScriptFunctionInstance.cs

@@ -144,7 +144,7 @@ namespace Jint.Native.Function
                 throw new JavaScriptException(result.Value);
             }
 
-            return result.Value;
+            return result.Value ?? Undefined.Instance;
         }
 
         /// <summary>

+ 3 - 2
Jint/Runtime/ExpressionIntepreter.cs

@@ -554,8 +554,9 @@ namespace Jint.Runtime
                 py = TypeConverter.ToPrimitive(y, Types.Number);
                 px = TypeConverter.ToPrimitive(x, Types.Number);
             }
-            var typea = TypeConverter.GetType(x);
-            var typeb = TypeConverter.GetType(y);
+
+            var typea = TypeConverter.GetType(px);
+            var typeb = TypeConverter.GetType(py);
 
             if (typea != Types.String || typeb != Types.String)
             {

+ 1 - 1
Jint/Runtime/StatementInterpreter.cs

@@ -366,7 +366,7 @@ namespace Jint.Runtime
 
         public Completion ExecuteStatementList(IEnumerable<Statement> statementList)
         {
-            var c = new Completion(Completion.Normal, Null.Instance, null);
+            var c = new Completion(Completion.Normal, Undefined.Instance, null);
             Completion sl = c;
 
             try