@qooxdoo/framework
Version:
The JS Framework for Coders
299 lines (240 loc) • 7.26 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2016 Zenesis Limited (http://www.zenesis.com)
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* John Spackman (john.spackman@zenesis.com)
************************************************************************ */
/* eslint-disable @qooxdoo/qx/no-refs-in-members */
qx.Class.define("qx.test.Annotation", {
extend: qx.dev.unit.TestCase,
members: {
testBasic() {
var clazzTop = qx.Class.define(null, {
"@": ["class-a-anno"],
extend: qx.core.Object,
"@construct": ["construct-a-anno"],
"@destruct": ["destruct-a-anno"],
properties: {
alpha: {
init: null,
nullable: true,
"@": ["property-alpha-anno"]
}
},
members: {
"@methodA": ["method-a-anno"],
methodA() {}
},
statics: {
"@staticA": ["static-a-anno"],
staticA() {
return true;
}
}
});
var clazzMiddle = qx.Class.define(null, {
extend: clazzTop,
properties: {
bravo: {
init: null,
nullable: true,
"@": ["property-bravo-anno"]
}
},
members: {
"@methodB": ["method-b-anno"],
methodB() {}
}
});
var clazzBottom = qx.Class.define(null, {
extend: clazzMiddle,
"@": ["class-c-anno"],
"@construct": ["construct-c-anno"],
"@destruct": ["destruct-c-anno"],
properties: {
bravo: {
refine: true,
"@": ["refined-bravo-anno"]
}
},
members: {
"@methodB": ["refined-method-b-anno"]
}
});
this.assertArrayEquals(
["class-a-anno"],
qx.Annotation.getOwnClass(clazzTop)
);
this.assertArrayEquals(
["class-a-anno"],
qx.Annotation.getClass(clazzTop)
);
this.assertArrayEquals(
["construct-a-anno"],
qx.Annotation.getConstructor(clazzTop)
);
this.assertArrayEquals(
["destruct-a-anno"],
qx.Annotation.getDestructor(clazzTop)
);
this.assertArrayEquals(
["method-a-anno"],
qx.Annotation.getOwnMember(clazzTop, "methodA")
);
this.assertArrayEquals(
["static-a-anno"],
qx.Annotation.getStatic(clazzTop, "staticA")
);
this.assertArrayEquals(
["property-alpha-anno"],
qx.Annotation.getProperty(clazzTop, "alpha")
);
this.assertArrayEquals([], qx.Annotation.getOwnClass(clazzMiddle));
this.assertArrayEquals(
["class-a-anno"],
qx.Annotation.getClass(clazzMiddle)
);
this.assertArrayEquals([], qx.Annotation.getOwnConstructor(clazzMiddle));
this.assertArrayEquals(
["construct-a-anno"],
qx.Annotation.getConstructor(clazzMiddle)
);
this.assertArrayEquals([], qx.Annotation.getOwnDestructor(clazzMiddle));
this.assertArrayEquals(
["destruct-a-anno"],
qx.Annotation.getDestructor(clazzMiddle)
);
this.assertArrayEquals(
[],
qx.Annotation.getOwnMember(clazzMiddle, "methodA")
);
this.assertArrayEquals(
["method-a-anno"],
qx.Annotation.getMember(clazzMiddle, "methodA")
);
this.assertArrayEquals(
["method-b-anno"],
qx.Annotation.getMember(clazzMiddle, "methodB")
);
this.assertArrayEquals(
[],
qx.Annotation.getStatic(clazzMiddle, "staticA")
);
this.assertArrayEquals(
["property-alpha-anno"],
qx.Annotation.getProperty(clazzMiddle, "alpha")
);
this.assertArrayEquals(
["property-bravo-anno"],
qx.Annotation.getProperty(clazzMiddle, "bravo")
);
this.assertArrayEquals(
["bravo"],
qx.Annotation.getPropertiesByAnnotation(
clazzBottom,
"property-bravo-anno"
)
);
this.assertArrayEquals(
["class-c-anno"],
qx.Annotation.getOwnClass(clazzBottom)
);
this.assertArrayEquals(
["class-c-anno", "class-a-anno"],
qx.Annotation.getClass(clazzBottom)
);
this.assertArrayEquals(
["construct-c-anno"],
qx.Annotation.getOwnConstructor(clazzBottom)
);
this.assertArrayEquals(
["construct-c-anno", "construct-a-anno"],
qx.Annotation.getConstructor(clazzBottom)
);
this.assertArrayEquals(
["destruct-c-anno"],
qx.Annotation.getOwnDestructor(clazzBottom)
);
this.assertArrayEquals(
["destruct-c-anno", "destruct-a-anno"],
qx.Annotation.getDestructor(clazzBottom)
);
this.assertArrayEquals(
[],
qx.Annotation.getOwnMember(clazzBottom, "methodA")
);
this.assertArrayEquals(
["method-a-anno"],
qx.Annotation.getMember(clazzBottom, "methodA")
);
this.assertArrayEquals(
["refined-method-b-anno", "method-b-anno"],
qx.Annotation.getMember(clazzBottom, "methodB")
);
this.assertArrayEquals(
["property-alpha-anno"],
qx.Annotation.getProperty(clazzBottom, "alpha")
);
this.assertArrayEquals(
["refined-bravo-anno", "property-bravo-anno"],
qx.Annotation.getProperty(clazzBottom, "bravo")
);
this.assertArrayEquals(
["refined-bravo-anno"],
qx.Annotation.getOwnProperty(clazzBottom, "bravo")
);
},
testByType() {
var MyAnno = qx.Class.define(null, {
extend: qx.core.Object,
construct(value) {
super();
if (value) {
this.setValue(value);
}
},
properties: {
value: {
init: 0
}
}
});
var clazz = qx.Class.define(null, {
extend: qx.core.Object,
"@construct": ["construct-a-anno"],
"@destruct": ["destruct-a-anno"],
properties: {
alpha: {
init: null,
nullable: true,
"@": ["property-alpha-anno", new MyAnno(2)]
}
},
members: {
"@methodA": ["method-a-anno", new MyAnno(3)],
methodA() {}
},
statics: {
"@staticA": ["static-a-anno", new MyAnno(4)],
staticA() {
return true;
}
}
});
var match = qx.Annotation.getProperty(clazz, "alpha", MyAnno);
this.assertEquals(1, match.length);
this.assertTrue(match[0] instanceof MyAnno);
var match = qx.Annotation.getOwnProperty(clazz, "alpha", MyAnno);
this.assertEquals(1, match.length);
this.assertTrue(match[0] instanceof MyAnno);
var match = qx.Annotation.getMember(clazz, "methodA", MyAnno);
this.assertEquals(1, match.length);
this.assertTrue(match[0] instanceof MyAnno);
}
}
});