Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Unified Diff: sky/tests/js/classes.sky

Issue 742183002: Enable ES6 classes. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sky/tests/js/classes.sky
diff --git a/sky/tests/js/classes.sky b/sky/tests/js/classes.sky
new file mode 100644
index 0000000000000000000000000000000000000000..a8d09e272e0ad7e06b5cfe8aee1bacb86345114d
--- /dev/null
+++ b/sky/tests/js/classes.sky
@@ -0,0 +1,163 @@
+<sky>
+<import src="../resources/chai.sky" />
+<import src="../resources/mocha.sky" />
+<script>
+describe("ES6 classes", function() {
+ it("should create instances", function() {
+ class Example {}
+ var instance = new Example();
+ assert.instanceOf(instance, Example);
+ });
+
+ it("should create subclasses", function() {
+ class Parent {}
+ class Child extends Parent {}
+ var instance = new Child();
+ assert.instanceOf(instance, Child);
+ assert.instanceOf(instance, Parent);
+ });
+
+ it("should create anonymous classes", function() {
+ var Parent = class {}
+ var Child = class extends Parent {}
+ var instance = new Child();
+ assert.instanceOf(instance, Child);
+ assert.instanceOf(instance, Parent);
+ });
+
+ it("should put methods on the prototype", function() {
+ class Test {
+ exampleMethod() { }
+ }
+ var instance = new Test();
+ assert.isFalse(instance.hasOwnProperty("exampleMethod"));
+ var proto = Object.getPrototypeOf(instance);
+ assert.isTrue(proto.hasOwnProperty("exampleMethod"));
+ });
+
+ it("should call methods with |this|", function() {
+ class Adder {
+ constructor(value) {
+ this.value = value;
+ }
+ add(other) {
+ return this.value + other;
+ }
+ }
+
+ var adder = new Adder(10);
+ assert.equal(adder.add(15), 25);
+ });
+
+ it("should let toMethod rebind super", function() {
+ var getValue = function() {
+ assert.isFunction(this.value);
+ assert.isFunction(this.superValue);
+ return this.value() + super.superValue();
+ }
+
+ class HolderParent {
+ superValue() {
+ return 5;
+ }
+ }
+
+ class Holder extends HolderParent {
+ constructor() {
+ this.value_ = 5;
+ }
+ value() {
+ return this.value_;
+ }
+ }
+
+ var holder = new Holder();
+ var getValueMethod = getValue.toMethod(Holder.prototype);
+ assert.equal(getValueMethod.call(holder), 10);
+ });
+
+ it("should support super() constructor calls", function() {
+ class Parent {
+ constructor(value) {
+ this.value = value;
+ }
+ }
+
+ class Child extends Parent {
+ constructor(value) {
+ super(value + 5);
+ }
+ }
+
+ var child = new Child(10);
+ assert.equal(child.value, 15);
+ });
+
+ it("should automatically call super() in default constructor", function() {
+ class Parent {
+ constructor() {
+ this.value = 10;
+ }
+ }
+
+ class Child extends Parent {
+ }
+
+ var child = new Child();
+ assert.equal(child.value, 10);
+ });
+
+ it("should call super.method()", function() {
+ class Parent {
+ value() {
+ return 10;
+ }
+ }
+
+ class Child extends Parent {
+ value() {
+ return super.value() + 5;
+ }
+ }
+
+ var child = new Child();
+ assert.equal(child.value(), 15);
+ });
+
+ it("should support getters and setters", function() {
+ class Variable {
+ constructor(value) {
+ this.value_ = value;
+ }
+
+ get value() {
+ return this.value_;
+ }
+
+ set value(newValue) {
+ this.value_ = newValue;
+ }
+ }
+
+ var variable = new Variable("first");
+
+ // Methods are on the prototype.
+ var proto = Object.getPrototypeOf(variable);
+ var descriptor = Object.getOwnPropertyDescriptor(proto, "value");
+ assert.isObject(descriptor);
+ assert.isFunction(descriptor.get);
+ assert.isFunction(descriptor.set);
+ assert.isUndefined(descriptor.value);
+
+ // Getter and setter should not be on the instance.
+ assert.isUndefined(Object.getOwnPropertyDescriptor(variable, "value"));
+
+ assert.equal(variable.value, "first");
+ assert.equal(variable.value_, "first");
+ variable.value = "second";
+ assert.equal(variable.value, "second");
+ assert.equal(variable.value_, "second");
+ });
+});
+</script>
+</sky>

Powered by Google App Engine
This is Rietveld 408576698