Verify javascript outline


Running: testClassConstructor
Text:
    class Test { constructor(foo, bar) { }}
Outline:
    class Test:0:6
    constructor(foo, bar):0:13

Running: testClassMethods
Text:
    class Test { foo() {} bar() { }}
Outline:
    class Test:0:6
    foo():0:13
    bar():0:22

Running: testAnonymousClass
Text:
    var test = class { constructor(foo, bar) { }}
Outline:
    class test:0:4
    constructor(foo, bar):0:19

Running: testClassExtends
Text:
    var A = class extends B { foo() { }}
Outline:
    class A:0:4
    foo():0:26

Running: testStaticMethod
Text:
    class Test { static foo() { }}
Outline:
    class Test:0:6
    static foo():0:20

