154 lines
3.3 KiB
Plaintext
154 lines
3.3 KiB
Plaintext
// Runtime type error tests — verify each type mismatch disrupts correctly
|
|
return {
|
|
test_text_plus_array_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = "hello" + [1, 2, 3]
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "text + array should disrupt"
|
|
},
|
|
|
|
test_number_plus_text_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = 1 + "hello"
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "number + text should disrupt"
|
|
},
|
|
|
|
test_number_plus_array_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = 1 + [1, 2]
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "number + array should disrupt"
|
|
},
|
|
|
|
test_text_multiply_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = "hello" * 2
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "text * number should disrupt"
|
|
},
|
|
|
|
test_text_divide_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = "hello" / 2
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "text / number should disrupt"
|
|
},
|
|
|
|
test_text_modulo_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = "hello" % 2
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "text % number should disrupt"
|
|
},
|
|
|
|
test_array_subtract_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = [1] - 2
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "array - number should disrupt"
|
|
},
|
|
|
|
test_negate_text_disrupts: function() {
|
|
var caught = false
|
|
var s = "hello"
|
|
var fn = function() {
|
|
return -s
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "negate text should disrupt"
|
|
},
|
|
|
|
test_push_on_non_array_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = "hello"
|
|
x[] = 1
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "push on non-array should disrupt"
|
|
},
|
|
|
|
test_pop_on_non_array_disrupts: function() {
|
|
var caught = false
|
|
var s = "hello"
|
|
var fn = function() {
|
|
var v = s[]
|
|
return v
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "pop on non-array should disrupt"
|
|
},
|
|
|
|
test_comparison_type_mismatch_disrupts: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
var x = "hello" < [1]
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "text < array should disrupt"
|
|
},
|
|
|
|
test_explicit_disrupt_works: function() {
|
|
var caught = false
|
|
var fn = function() {
|
|
disrupt
|
|
} disruption {
|
|
caught = true
|
|
}
|
|
fn()
|
|
if (!caught) return "explicit disrupt should be caught"
|
|
},
|
|
|
|
test_valid_add_text: function() {
|
|
var x = "hello" + " world"
|
|
if (x != "hello world") return "text + text should work"
|
|
},
|
|
|
|
test_valid_add_numbers: function() {
|
|
var x = 1 + 2
|
|
if (x != 3) return "number + number should work"
|
|
},
|
|
|
|
test_valid_comparison: function() {
|
|
if (!(1 < 2)) return "1 < 2 should be true"
|
|
if (!("a" < "b")) return "a < b should be true"
|
|
}
|
|
}
|