| OLD | NEW |
| (Empty) |
| 1 <sky> | |
| 2 <import src="../resources/chai.sky" /> | |
| 3 <import src="../resources/mocha.sky" /> | |
| 4 <script> | |
| 5 describe("ES6 classes", function() { | |
| 6 it("should create instances", function() { | |
| 7 class Example {} | |
| 8 var instance = new Example(); | |
| 9 assert.instanceOf(instance, Example); | |
| 10 }); | |
| 11 | |
| 12 it("should create subclasses", function() { | |
| 13 class Parent {} | |
| 14 class Child extends Parent {} | |
| 15 var instance = new Child(); | |
| 16 assert.instanceOf(instance, Child); | |
| 17 assert.instanceOf(instance, Parent); | |
| 18 }); | |
| 19 | |
| 20 it("should create anonymous classes", function() { | |
| 21 var Parent = class {} | |
| 22 var Child = class extends Parent {} | |
| 23 var instance = new Child(); | |
| 24 assert.instanceOf(instance, Child); | |
| 25 assert.instanceOf(instance, Parent); | |
| 26 }); | |
| 27 | |
| 28 it("should put methods on the prototype", function() { | |
| 29 class Test { | |
| 30 exampleMethod() { } | |
| 31 } | |
| 32 var instance = new Test(); | |
| 33 assert.isFalse(instance.hasOwnProperty("exampleMethod")); | |
| 34 var proto = Object.getPrototypeOf(instance); | |
| 35 assert.isTrue(proto.hasOwnProperty("exampleMethod")); | |
| 36 }); | |
| 37 | |
| 38 it("should call methods with |this|", function() { | |
| 39 class Adder { | |
| 40 constructor(value) { | |
| 41 this.value = value; | |
| 42 } | |
| 43 add(other) { | |
| 44 return this.value + other; | |
| 45 } | |
| 46 } | |
| 47 | |
| 48 var adder = new Adder(10); | |
| 49 assert.equal(adder.add(15), 25); | |
| 50 }); | |
| 51 | |
| 52 it("should let toMethod rebind super", function() { | |
| 53 var getValue = function() { | |
| 54 assert.isFunction(this.value); | |
| 55 assert.isFunction(this.superValue); | |
| 56 return this.value() + super.superValue(); | |
| 57 } | |
| 58 | |
| 59 class HolderParent { | |
| 60 superValue() { | |
| 61 return 5; | |
| 62 } | |
| 63 } | |
| 64 | |
| 65 class Holder extends HolderParent { | |
| 66 constructor() { | |
| 67 this.value_ = 5; | |
| 68 } | |
| 69 value() { | |
| 70 return this.value_; | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 var holder = new Holder(); | |
| 75 var getValueMethod = getValue.toMethod(Holder.prototype); | |
| 76 assert.equal(getValueMethod.call(holder), 10); | |
| 77 }); | |
| 78 | |
| 79 it("should support super() constructor calls", function() { | |
| 80 class Parent { | |
| 81 constructor(value) { | |
| 82 this.value = value; | |
| 83 } | |
| 84 } | |
| 85 | |
| 86 class Child extends Parent { | |
| 87 constructor(value) { | |
| 88 super(value + 5); | |
| 89 } | |
| 90 } | |
| 91 | |
| 92 var child = new Child(10); | |
| 93 assert.equal(child.value, 15); | |
| 94 }); | |
| 95 | |
| 96 it("should automatically call super() in default constructor", function() { | |
| 97 class Parent { | |
| 98 constructor() { | |
| 99 this.value = 10; | |
| 100 } | |
| 101 } | |
| 102 | |
| 103 class Child extends Parent { | |
| 104 } | |
| 105 | |
| 106 var child = new Child(); | |
| 107 assert.equal(child.value, 10); | |
| 108 }); | |
| 109 | |
| 110 it("should call super.method()", function() { | |
| 111 class Parent { | |
| 112 value() { | |
| 113 return 10; | |
| 114 } | |
| 115 } | |
| 116 | |
| 117 class Child extends Parent { | |
| 118 value() { | |
| 119 return super.value() + 5; | |
| 120 } | |
| 121 } | |
| 122 | |
| 123 var child = new Child(); | |
| 124 assert.equal(child.value(), 15); | |
| 125 }); | |
| 126 | |
| 127 it("should support getters and setters", function() { | |
| 128 class Variable { | |
| 129 constructor(value) { | |
| 130 this.value_ = value; | |
| 131 } | |
| 132 | |
| 133 get value() { | |
| 134 return this.value_; | |
| 135 } | |
| 136 | |
| 137 set value(newValue) { | |
| 138 this.value_ = newValue; | |
| 139 } | |
| 140 } | |
| 141 | |
| 142 var variable = new Variable("first"); | |
| 143 | |
| 144 // Methods are on the prototype. | |
| 145 var proto = Object.getPrototypeOf(variable); | |
| 146 var descriptor = Object.getOwnPropertyDescriptor(proto, "value"); | |
| 147 assert.isObject(descriptor); | |
| 148 assert.isFunction(descriptor.get); | |
| 149 assert.isFunction(descriptor.set); | |
| 150 assert.isUndefined(descriptor.value); | |
| 151 | |
| 152 // Getter and setter should not be on the instance. | |
| 153 assert.isUndefined(Object.getOwnPropertyDescriptor(variable, "value")); | |
| 154 | |
| 155 assert.equal(variable.value, "first"); | |
| 156 assert.equal(variable.value_, "first"); | |
| 157 variable.value = "second"; | |
| 158 assert.equal(variable.value, "second"); | |
| 159 assert.equal(variable.value_, "second"); | |
| 160 }); | |
| 161 }); | |
| 162 </script> | |
| 163 </sky> | |
| OLD | NEW |