about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2018-10-09 19:01:17 -0700
committerEsteban Küber <esteban@kuber.com.ar>2018-10-09 19:01:17 -0700
commit2305d02c1af360ac32f2679418621ade1c3469b0 (patch)
tree432191d1c2d88d11f2034ee3ed92e5b9893cf5f9
parent330b7eda952689b03a66c9e22361d6153c321648 (diff)
downloadrust-2305d02c1af360ac32f2679418621ade1c3469b0.tar.gz
rust-2305d02c1af360ac32f2679418621ade1c3469b0.zip
Add tests for handled cases
-rw-r--r--src/test/ui/iterators/array-of-ranges.rs9
-rw-r--r--src/test/ui/iterators/array-of-ranges.stderr43
-rw-r--r--src/test/ui/iterators/array.rs6
-rw-r--r--src/test/ui/iterators/array.stderr33
-rw-r--r--src/test/ui/iterators/bound.rs3
-rw-r--r--src/test/ui/iterators/bound.stderr17
-rw-r--r--src/test/ui/iterators/integral.rs26
-rw-r--r--src/test/ui/iterators/integral.stderr122
-rw-r--r--src/test/ui/iterators/string.rs6
-rw-r--r--src/test/ui/iterators/string.stderr21
10 files changed, 286 insertions, 0 deletions
diff --git a/src/test/ui/iterators/array-of-ranges.rs b/src/test/ui/iterators/array-of-ranges.rs
new file mode 100644
index 00000000000..eb2309f7a3f
--- /dev/null
+++ b/src/test/ui/iterators/array-of-ranges.rs
@@ -0,0 +1,9 @@
+fn main() {
+    for _ in [0..1] {}
+    let start = 0;
+    let end = 0;
+    for _ in [start..end] {}
+    let array_of_range = [start..end];
+    for _ in array_of_range {}
+    for _ in [0..1, 2..3] {}
+}
diff --git a/src/test/ui/iterators/array-of-ranges.stderr b/src/test/ui/iterators/array-of-ranges.stderr
new file mode 100644
index 00000000000..95839ebc53a
--- /dev/null
+++ b/src/test/ui/iterators/array-of-ranges.stderr
@@ -0,0 +1,43 @@
+error[E0277]: `[std::ops::Range<{integer}>; 1]` is not an iterator
+  --> $DIR/array-of-ranges.rs:2:14
+   |
+LL |     for _ in [0..1] {}
+   |              ^^^^^^ if you meant to iterate between two values, remove the square brackets
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `[std::ops::Range<{integer}>; 1]`
+   = note: `[start..end]` is an array of one `Range`, you might have meant to have a `Range`: `start..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `[std::ops::Range<{integer}>; 1]` is not an iterator
+  --> $DIR/array-of-ranges.rs:5:14
+   |
+LL |     for _ in [start..end] {}
+   |              ^^^^^^^^^^^^ if you meant to iterate between two values, remove the square brackets
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `[std::ops::Range<{integer}>; 1]`
+   = note: `[start..end]` is an array of one `Range`, you might have meant to have a `Range`: `start..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `[std::ops::Range<{integer}>; 1]` is not an iterator
+  --> $DIR/array-of-ranges.rs:7:14
+   |
+LL |     for _ in array_of_range {}
+   |              ^^^^^^^^^^^^^^ if you meant to iterate between two values, remove the square brackets
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `[std::ops::Range<{integer}>; 1]`
+   = note: `[start..end]` is an array of one `Range`, you might have meant to have a `Range`: `start..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `[std::ops::Range<{integer}>; 2]` is not an iterator
+  --> $DIR/array-of-ranges.rs:8:14
+   |
+LL |     for _ in [0..1, 2..3] {}
+   |              ^^^^^^^^^^^^ borrow the array with `&` or call `.iter()` on it to iterate over it
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `[std::ops::Range<{integer}>; 2]`
+   = note: arrays are not an iterators, but slices like the following are: `&[1, 2, 3]`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/iterators/array.rs b/src/test/ui/iterators/array.rs
new file mode 100644
index 00000000000..f54bb812743
--- /dev/null
+++ b/src/test/ui/iterators/array.rs
@@ -0,0 +1,6 @@
+fn main() {
+    for _ in [1, 2] {}
+    let x = [1, 2];
+    for _ in x {}
+    for _ in [1.0, 2.0] {}
+}
diff --git a/src/test/ui/iterators/array.stderr b/src/test/ui/iterators/array.stderr
new file mode 100644
index 00000000000..fd74cd7a727
--- /dev/null
+++ b/src/test/ui/iterators/array.stderr
@@ -0,0 +1,33 @@
+error[E0277]: `[{integer}; 2]` is not an iterator
+  --> $DIR/array.rs:2:14
+   |
+LL |     for _ in [1, 2] {}
+   |              ^^^^^^ borrow the array with `&` or call `.iter()` on it to iterate over it
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `[{integer}; 2]`
+   = note: arrays are not an iterators, but slices like the following are: `&[1, 2, 3]`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `[{integer}; 2]` is not an iterator
+  --> $DIR/array.rs:4:14
+   |
+LL |     for _ in x {}
+   |              ^ borrow the array with `&` or call `.iter()` on it to iterate over it
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `[{integer}; 2]`
+   = note: arrays are not an iterators, but slices like the following are: `&[1, 2, 3]`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `[{float}; 2]` is not an iterator
+  --> $DIR/array.rs:5:14
+   |
+LL |     for _ in [1.0, 2.0] {}
+   |              ^^^^^^^^^^ borrow the array with `&` or call `.iter()` on it to iterate over it
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `[{float}; 2]`
+   = note: arrays are not an iterators, but slices like the following are: `&[1, 2, 3]`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/iterators/bound.rs b/src/test/ui/iterators/bound.rs
new file mode 100644
index 00000000000..78285b8161c
--- /dev/null
+++ b/src/test/ui/iterators/bound.rs
@@ -0,0 +1,3 @@
+struct S<I: Iterator>(I);
+struct T(S<u8>);
+fn main() {}
diff --git a/src/test/ui/iterators/bound.stderr b/src/test/ui/iterators/bound.stderr
new file mode 100644
index 00000000000..2ddbd93c83c
--- /dev/null
+++ b/src/test/ui/iterators/bound.stderr
@@ -0,0 +1,17 @@
+error[E0277]: `u8` is not an iterator
+  --> $DIR/bound.rs:2:10
+   |
+LL | struct T(S<u8>);
+   |          ^^^^^ `u8` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `u8`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+note: required by `S`
+  --> $DIR/bound.rs:1:1
+   |
+LL | struct S<I: Iterator>(I);
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/iterators/integral.rs b/src/test/ui/iterators/integral.rs
new file mode 100644
index 00000000000..7537c7904c0
--- /dev/null
+++ b/src/test/ui/iterators/integral.rs
@@ -0,0 +1,26 @@
+fn main() {
+    for _ in 42 {}
+    //~^ ERROR `{integer}` is not an iterator
+    for _ in 42 as u8 {}
+    //~^ ERROR `u8` is not an iterator
+    for _ in 42 as i8 {}
+    //~^ ERROR `i8` is not an iterator
+    for _ in 42 as u16 {}
+    //~^ ERROR `u16` is not an iterator
+    for _ in 42 as i16 {}
+    //~^ ERROR `i16` is not an iterator
+    for _ in 42 as u32 {}
+    //~^ ERROR `u32` is not an iterator
+    for _ in 42 as i32 {}
+    //~^ ERROR `i32` is not an iterator
+    for _ in 42 as u64 {}
+    //~^ ERROR `u64` is not an iterator
+    for _ in 42 as i64 {}
+    //~^ ERROR `i64` is not an iterator
+    for _ in 42 as usize {}
+    //~^ ERROR `usize` is not an iterator
+    for _ in 42 as isize {}
+    //~^ ERROR `isize` is not an iterator
+    for _ in 42.0 {}
+    //~^ ERROR `{float}` is not an iterator
+}
diff --git a/src/test/ui/iterators/integral.stderr b/src/test/ui/iterators/integral.stderr
new file mode 100644
index 00000000000..3662d97d72e
--- /dev/null
+++ b/src/test/ui/iterators/integral.stderr
@@ -0,0 +1,122 @@
+error[E0277]: `{integer}` is not an iterator
+  --> $DIR/integral.rs:2:14
+   |
+LL |     for _ in 42 {}
+   |              ^^ `{integer}` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `{integer}`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `u8` is not an iterator
+  --> $DIR/integral.rs:4:14
+   |
+LL |     for _ in 42 as u8 {}
+   |              ^^^^^^^^ `u8` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `u8`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `i8` is not an iterator
+  --> $DIR/integral.rs:6:14
+   |
+LL |     for _ in 42 as i8 {}
+   |              ^^^^^^^^ `i8` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `i8`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `u16` is not an iterator
+  --> $DIR/integral.rs:8:14
+   |
+LL |     for _ in 42 as u16 {}
+   |              ^^^^^^^^^ `u16` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `u16`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `i16` is not an iterator
+  --> $DIR/integral.rs:10:14
+   |
+LL |     for _ in 42 as i16 {}
+   |              ^^^^^^^^^ `i16` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `i16`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `u32` is not an iterator
+  --> $DIR/integral.rs:12:14
+   |
+LL |     for _ in 42 as u32 {}
+   |              ^^^^^^^^^ `u32` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `u32`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `i32` is not an iterator
+  --> $DIR/integral.rs:14:14
+   |
+LL |     for _ in 42 as i32 {}
+   |              ^^^^^^^^^ `i32` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `i32`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `u64` is not an iterator
+  --> $DIR/integral.rs:16:14
+   |
+LL |     for _ in 42 as u64 {}
+   |              ^^^^^^^^^ `u64` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `u64`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `i64` is not an iterator
+  --> $DIR/integral.rs:18:14
+   |
+LL |     for _ in 42 as i64 {}
+   |              ^^^^^^^^^ `i64` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `i64`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `usize` is not an iterator
+  --> $DIR/integral.rs:20:14
+   |
+LL |     for _ in 42 as usize {}
+   |              ^^^^^^^^^^^ `usize` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `usize`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `isize` is not an iterator
+  --> $DIR/integral.rs:22:14
+   |
+LL |     for _ in 42 as isize {}
+   |              ^^^^^^^^^^^ `isize` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `isize`
+   = note: if you want to iterate between `0` until a value `end`, use the range syntax: `0..end`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `{float}` is not an iterator
+  --> $DIR/integral.rs:24:14
+   |
+LL |     for _ in 42.0 {}
+   |              ^^^^ `{float}` is not an iterator
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `{float}`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error: aborting due to 12 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/iterators/string.rs b/src/test/ui/iterators/string.rs
new file mode 100644
index 00000000000..4373dcaabe5
--- /dev/null
+++ b/src/test/ui/iterators/string.rs
@@ -0,0 +1,6 @@
+fn main() {
+    for _ in "".to_owned() {}
+    //~^ ERROR `std::string::String` is not an iterator
+    for _ in "" {}
+    //~^ ERROR `&str` is not an iterator
+}
diff --git a/src/test/ui/iterators/string.stderr b/src/test/ui/iterators/string.stderr
new file mode 100644
index 00000000000..927de952cc8
--- /dev/null
+++ b/src/test/ui/iterators/string.stderr
@@ -0,0 +1,21 @@
+error[E0277]: `std::string::String` is not an iterator
+  --> $DIR/string.rs:2:14
+   |
+LL |     for _ in "".to_owned() {}
+   |              ^^^^^^^^^^^^^ `std::string::String` is not an iterator; try calling `.chars()` or `.bytes()`
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `std::string::String`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `&str` is not an iterator
+  --> $DIR/string.rs:4:14
+   |
+LL |     for _ in "" {}
+   |              ^^ `&str` is not an iterator; try calling `.chars()` or `.bytes()`
+   |
+   = help: the trait `std::iter::Iterator` is not implemented for `&str`
+   = note: required by `std::iter::IntoIterator::into_iter`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.