Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8011700

More compatibility issues reported by André Bargull on nashorn-dev

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 8
    • 8
    • core-libs
    • generic
    • generic
    • Verified

      Message from André Bargull on nashorn-dev quoted below:

      ---

      Here are some more test cases which don't yet work as expected in Nashorn.

      - André


      var o = {a:1,b:2,c:3}; for (var x in o) {if (x=='a')delete o.b; print(x)}
      => should only print "a" and "b"

      9223372036854775807|0
      => should return 0

      9223372036854775807>>>0
      => should return 0 instead of 4294967295

      Also visible in other places where ToUint32() is used, e.g.
      Array.prototype.map.call({length: 9223372036854775807, get 0(){print("get 0")}}, function(){}).length
      => should return 0 instead of 4294967295

      parseInt("10",9223372036854775807)
      => should return 10 instead of NaN

      Array.prototype.map.call({length: -1, get 0(){throw 0}}, function(){}).length
      => should throw instead of returning 4294967295

      parseInt("90071992547409990",10) === 90071992547409990
      => should return true

      escape("\0")
      => should return "%00" instead of "%0"

      "\471".charCodeAt(0)
      => should return 39 instead of 313

      08in {}
      => should throw a syntax error

      "aa".split(undefined,0).length
      => should return 0 instead of 1

      "aa".split(/(a)/, 1).length
      => should return 1 instead of 2

      "abc".split("", 1).length
      => should return 1 instead of 3

      "aa".split((r = /a/, r.lastIndex = {valueOf:function(){throw 2}}, r))
      => should not throw an exception

      (function(a){ Object.defineProperty(arguments,"0",{get value(){print("get value"); return 0}}); return a })(1)
      => should print "get value" only once

      (function(k){ arguments[0]=1; return k })()
      => should return `undefined` instead of `1`

      (function(k){var a=eval("arguments"); return a[0]})(1)
      => should return `1` instead of `undefined`

      "abc".replace("c", function(){return "$&"})
      => should return "a$&c" instead of "abc"


      And some miscellaneous RegExp compatibility issues:

      /\471/.test("\x271")
      => should return true

      /\08/.test("\x008")
      => should return true instead of throwing an exception

      /\8/.test("\\8")
      => should return true instead of false

      /[]|[^]/.test("a")
      => should return true instead of false

      /(?![])/.test("")
      => should return true instead of false

      /(?=a){2}aa/.test("aaa")
      => web compatibility issue (quantifier allowed after positive lookahead)

      /(?!a){2}bb/.test("bbb")
      => web compatibility issue (quantifier allowed after negative lookahead)

      /(?!(a))(?!\1)b/.test("b")
      => returns true but should return false

      /\cı/.test("\x09")
      => should return false instead of true

      /\cſ/.test("\x13")
      => should return false instead of true

      /[\c0]/.test("\x10")
      => should return true instead of false

      /[\c_]/.test("\x1F")
      => should return true instead of false

      /[\c#]/.test("\\")
      => should return true instead of false

      RegExp("[\0]").test("\0")
      => should not throw SyntaxError

      /[&&]/.test("&")
      => should not throw SyntaxError

      /[[&[]/.test("&")
      => should return true instead of false

      /[ [^]/.test("a")
      => should return false instead of true

      /[^\S\s]/.test(" ")
      => should return false instead of true

      /[\2]/.test("\x02")
      => should return true instead of false

      /[\0-\s]/.test("\x01")
      => should throw a SyntaxError (given that /[a-\d]/ also throws a SyntaxError in Nashorn, but compare SpiderMonkey vs. JSC/V8)


      And two more less easy to fix RegExp bugs:

      /(?:(f)(o)(o)|(b)(a)(r))*/.exec("foobar").toString()
      => should return "foobar,,,,b,a,r" instead of "foobar,f,o,o,b,a,r"

      /(a|b*)*/.exec("aab").toString()
      => should return "aab,b" instead of "aab,"

            hannesw Hannes Wallnoefer
            hannesw Hannes Wallnoefer
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: