feat: add validateNum/validateInt helpers and runtime type checks for list methods

Replace the old validateIndex function with validateNum and validateInt helpers that produce descriptive runtime error messages. Add new test files covering invalid index types, out-of-bounds indices, and iterator validation for list insert, iterate, and iteratorValue methods. Rename existing number operator error tests to use consistent "must be a number" phrasing.
This commit is contained in:
Bob Nystrom
2014-01-02 15:32:00 +00:00
parent 003d4f77f4
commit 6fb8804c9e
25 changed files with 133 additions and 65 deletions
-3
View File
@@ -1,6 +1,3 @@
// TODO: What happens if the index isn't an integer?
// TODO: Out of bounds.
// Add to empty list.
var a = []
a.insert(1, 0)
+2
View File
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.insert("value", 1.5) // expect runtime error: Index must be an integer.
+2
View File
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.insert("value", "2") // expect runtime error: Index must be a number.
+2
View File
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.insert("value", 4) // expect runtime error: Index out of bounds.
+2
View File
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.insert("value", -5) // expect runtime error: Index out of bounds.
+7
View File
@@ -0,0 +1,7 @@
var a = ["one", "two", "three", "four"]
IO.write(a.iterate(null)) // expect: 0
IO.write(a.iterate(0)) // expect: 1
IO.write(a.iterate(1)) // expect: 2
IO.write(a.iterate(2)) // expect: 3
IO.write(a.iterate(3)) // expect: false
IO.write(a.iterate(-1)) // expect: false
+2
View File
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.iterate(1.5) // expect runtime error: Iterator must be an integer.
+2
View File
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.iterate("2") // expect runtime error: Iterator must be a number.
+5
View File
@@ -0,0 +1,5 @@
var a = ["one", "two", "three", "four"]
IO.write(a.iteratorValue(0)) // expect: one
IO.write(a.iteratorValue(1)) // expect: two
IO.write(a.iteratorValue(2)) // expect: three
IO.write(a.iteratorValue(3)) // expect: four
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.iteratorValue(1.5) // expect runtime error: Iterator must be an integer.
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.iteratorValue("2") // expect runtime error: Iterator must be a number.
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.iteratorValue(4) // expect runtime error: Iterator out of bounds.
@@ -0,0 +1,2 @@
var a = [1, 2, 3]
a.iteratorValue(-5) // expect runtime error: Iterator out of bounds.