Test OO params are correct type
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
window.testSuites.push( class testShadow {
|
||||
window.testSuites.push( class testInit {
|
||||
|
||||
ObjectAsStateField() {
|
||||
class File extends Shadow {
|
||||
@@ -207,6 +207,32 @@ window.testSuites.push( class testShadow {
|
||||
}
|
||||
}
|
||||
|
||||
ErrorIfNotObservedObject() {
|
||||
window.register(class ChildSpace extends Shadow {
|
||||
$$form
|
||||
$name
|
||||
|
||||
render = () => {
|
||||
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super()
|
||||
this.name = this.form.path.split("/").pop()
|
||||
}
|
||||
}, randomName("space-"))
|
||||
|
||||
try {
|
||||
let space = ChildSpace({path: "/asd"})
|
||||
return "no error thrown!"
|
||||
} catch(e) {
|
||||
if(e.message.includes("Observed Object")) {
|
||||
} else {
|
||||
throw e
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FieldsInCorrectOrder() {
|
||||
window.register(class ChildSpace extends Shadow {
|
||||
$$form
|
||||
@@ -221,9 +247,13 @@ window.testSuites.push( class testShadow {
|
||||
this.name = this.form.path.split("/").pop()
|
||||
}
|
||||
}, randomName("space-"))
|
||||
|
||||
class Form extends ObservedObject {
|
||||
$path
|
||||
}
|
||||
|
||||
try {
|
||||
let space = ChildSpace({path: "/asd"})
|
||||
let space = ChildSpace(Form.decode({path: "/asd"}))
|
||||
} catch(e) {
|
||||
if(e.message.includes("Cannot read properties of undefined (reading 'path')")) {
|
||||
return "Form did not get initialized!"
|
||||
@@ -2,7 +2,7 @@ console.log("Tests initializing.")
|
||||
window.testSuites = [];
|
||||
|
||||
await import ("./parse.test.js")
|
||||
await import ("./shadow.test.js")
|
||||
await import ("./init.test.js")
|
||||
await import ("./observedobject.test.js")
|
||||
await import ("./render.test.js")
|
||||
|
||||
|
||||
15
index.js
15
index.js
@@ -419,21 +419,22 @@ window.Registry = class Registry {
|
||||
makeState(elem, stateNames, params)
|
||||
makeObservedObjects(elem, observedObjectNames, params)
|
||||
|
||||
let allNamesCleaned = allNames
|
||||
.filter(key => typeof elem[key] !== 'function' && key !== "_observers" && key !== "_observedObjects")
|
||||
.map(key => key.replace(/^(\$\$|\$)/, ''));
|
||||
|
||||
let i = -1
|
||||
for (let param of params) {
|
||||
i++
|
||||
|
||||
if(i > allNamesCleaned.length) {
|
||||
if(i > allNames.length) {
|
||||
console.error(`${el.prototype.constructor.name}: too many parameters for field!`)
|
||||
return
|
||||
}
|
||||
|
||||
if(elem[allNamesCleaned[i]] === undefined) {
|
||||
elem[allNamesCleaned[i]] = param
|
||||
let bareName = allNames[i].replace(/^(\$\$|\$)/, '');
|
||||
|
||||
if(elem[bareName] === undefined) {
|
||||
if(allNames[i].startsWith("$$") && !(param instanceof ObservedObject)) {
|
||||
throw new Error(`Field ${allNames[i]} must be an Observed Object!`)
|
||||
}
|
||||
elem[bareName] = param
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user