Test OO params are correct type

This commit is contained in:
metacryst
2024-03-28 10:34:07 -05:00
parent cbd1e613e3
commit 66f56727a5
3 changed files with 41 additions and 10 deletions

View File

@@ -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!"

View File

@@ -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")

View File

@@ -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
}
}
}