Browse Source

Marking unit tests which should not be broken

Sebastien Ros 12 years ago
parent
commit
4e9d74e03a
51 changed files with 109 additions and 32 deletions
  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