better errors
This commit is contained in:
153
tests/errors.cm
Normal file
153
tests/errors.cm
Normal file
@@ -0,0 +1,153 @@
|
||||
// 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"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user