Files
hakorune/tests/development/test_delegation_edge_cases.hako

79 lines
1.8 KiB
Plaintext
Raw Permalink Normal View History

// デリゲーション・overrideの詳細テストエッジケース
local console
console = new ConsoleBox()
// === 基本デリゲーション ===
box BaseBox {
init { value, count }
pack(val) {
me.value = val
me.count = 0
}
getValue() {
return me.value
}
increment() {
me.count = me.count + 1
return me.count
}
}
box ExtendedBox from BaseBox {
init { multiplier }
pack(val, mult) {
from BaseBox.pack(val)
me.multiplier = mult
}
// override without calling parent
override getValue() {
return me.value + " (Extended)"
}
// override with parent call
override increment() {
local result
result = from BaseBox.increment()
return result * me.multiplier
}
}
// === テスト実行 ===
console.log("=== Basic delegation test ===")
local base
base = new BaseBox("Hello")
console.log("Base value: " + base.getValue())
console.log("Base increment: " + base.increment())
console.log("=== Extended delegation test ===")
local ext
ext = new ExtendedBox("World", 2)
console.log("Extended value: " + ext.getValue())
console.log("Extended increment: " + ext.increment())
console.log("Extended increment again: " + ext.increment())
// === 多重デリゲーション ===
console.log("=== Multiple delegation test ===")
box SuperExtendedBox from ExtendedBox {
init { suffix }
pack(val, mult, suf) {
from ExtendedBox.pack(val, mult)
me.suffix = suf
}
override getValue() {
local parentValue
parentValue = from ExtendedBox.getValue()
return parentValue + me.suffix
}
}
local super
super = new SuperExtendedBox("Chain", 3, "!!!")
console.log("Super value: " + super.getValue())
console.log("Super increment: " + super.increment())