mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
144 lines
2.7 KiB
JavaScript
144 lines
2.7 KiB
JavaScript
test("basic functionality", () => {
|
|
class A {
|
|
static method() {
|
|
return 10;
|
|
}
|
|
}
|
|
|
|
expect(A.method()).toBe(10);
|
|
expect(new A().method).toBeUndefined();
|
|
});
|
|
|
|
test("extended name syntax", () => {
|
|
class A {
|
|
static method() {
|
|
return 1;
|
|
}
|
|
|
|
static 12() {
|
|
return 2;
|
|
}
|
|
|
|
static [`he${"llo"}`]() {
|
|
return 3;
|
|
}
|
|
}
|
|
|
|
expect(A.method()).toBe(1);
|
|
expect(A[12]()).toBe(2);
|
|
expect(A.hello()).toBe(3);
|
|
});
|
|
|
|
test("bound |this|", () => {
|
|
class A {
|
|
static method() {
|
|
expect(this).toBe(A);
|
|
}
|
|
}
|
|
|
|
A.method();
|
|
});
|
|
|
|
test("inherited static methods", () => {
|
|
class Parent {
|
|
static method() {
|
|
return 3;
|
|
}
|
|
}
|
|
|
|
class Child extends Parent {}
|
|
|
|
expect(Parent.method()).toBe(3);
|
|
expect(Child.method()).toBe(3);
|
|
expect(new Parent()).not.toHaveProperty("method");
|
|
expect(new Child()).not.toHaveProperty("method");
|
|
});
|
|
|
|
test("static method overriding", () => {
|
|
class Parent {
|
|
static method() {
|
|
return 3;
|
|
}
|
|
}
|
|
|
|
class Child extends Parent {
|
|
static method() {
|
|
return 10;
|
|
}
|
|
}
|
|
|
|
expect(Parent.method()).toBe(3);
|
|
expect(Child.method()).toBe(10);
|
|
});
|
|
|
|
test("static function named 'async'", () => {
|
|
class A {
|
|
static async() {
|
|
return "static function named async";
|
|
}
|
|
}
|
|
|
|
expect("async" in A).toBeTrue();
|
|
expect(A.async()).toBe("static function named async");
|
|
});
|
|
|
|
test("can call other private methods from static method", () => {
|
|
class A {
|
|
static #a() {
|
|
return 1;
|
|
}
|
|
|
|
static async #b() {
|
|
return 2;
|
|
}
|
|
|
|
static syncA() {
|
|
return this.#a();
|
|
}
|
|
|
|
static async asyncA() {
|
|
return this.#a();
|
|
}
|
|
|
|
static syncB() {
|
|
return this.#b();
|
|
}
|
|
|
|
static async asyncB() {
|
|
return this.#b();
|
|
}
|
|
}
|
|
|
|
var called = false;
|
|
|
|
async function check() {
|
|
called = true;
|
|
expect(A.syncA()).toBe(1);
|
|
expect(await A.asyncA()).toBe(1);
|
|
expect(await A.syncB()).toBe(2);
|
|
expect(await A.asyncB()).toBe(2);
|
|
return 3;
|
|
}
|
|
|
|
var error = null;
|
|
var failed = false;
|
|
|
|
check().then(
|
|
value => {
|
|
expect(called).toBeTrue();
|
|
expect(value).toBe(3);
|
|
},
|
|
thrownError => {
|
|
failed = true;
|
|
error = thrownError;
|
|
}
|
|
);
|
|
|
|
runQueuedPromiseJobs();
|
|
|
|
expect(called).toBeTrue();
|
|
|
|
if (failed) throw error;
|
|
|
|
expect(failed).toBeFalse();
|
|
});
|