about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSunjay Varma <varma.sunjay@gmail.com>2017-11-09 22:42:29 -0500
committerSunjay Varma <varma.sunjay@gmail.com>2017-12-01 01:26:29 -0500
commit332a3cb169aa41c961fdc2244b005bc31a2e9a74 (patch)
treed2d21c0c2adad3ef8ceb7ffe2206be593a347e1c
parent83efebc5393624072526720b62f03e1c1f5e7b25 (diff)
downloadrust-332a3cb169aa41c961fdc2244b005bc31a2e9a74.tar.gz
rust-332a3cb169aa41c961fdc2244b005bc31a2e9a74.zip
More testing for generic associated types parsing
-rw-r--r--src/test/run-pass/rfc1598-generic-associated-types/generic-associated-types-where.rs (renamed from src/test/run-pass/rfc1598-generic-associated-types/where.rs)0
-rw-r--r--src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs3
-rw-r--r--src/test/run-pass/rfc1598-generic-associated-types/whitespace-before-generics.rs35
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/empty_generics.rs17
-rw-r--r--src/test/ui/rfc1598-generic-associated-types/generic_associated_types_equals.rs18
5 files changed, 72 insertions, 1 deletions
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/where.rs b/src/test/run-pass/rfc1598-generic-associated-types/generic-associated-types-where.rs
index 269e5dc26fc..269e5dc26fc 100644
--- a/src/test/run-pass/rfc1598-generic-associated-types/where.rs
+++ b/src/test/run-pass/rfc1598-generic-associated-types/generic-associated-types-where.rs
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs b/src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs
index fd476e2592d..58ec14d1075 100644
--- a/src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs
+++ b/src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs
@@ -25,7 +25,8 @@ struct Foo<T: StreamingIterator> {
 
 // Users can bound parameters by the type constructed by that trait's associated type constructor
 // of a trait using HRTB. Both type equality bounds and trait bounds of this kind are valid:
-//fn foo<T: for<'a> StreamingIterator<Item<'a>=&'a [i32]>>(iter: T) { ... }
+//FIXME(sunjay): This next line should parse and be valid
+//fn foo<T: for<'a> StreamingIterator<Item<'a>=&'a [i32]>>(iter: T) { /* ... */ }
 fn foo<T>(iter: T) where T: StreamingIterator, for<'a> T::Item<'a>: Display { /* ... */ }
 
 fn main() {}
diff --git a/src/test/run-pass/rfc1598-generic-associated-types/whitespace-before-generics.rs b/src/test/run-pass/rfc1598-generic-associated-types/whitespace-before-generics.rs
new file mode 100644
index 00000000000..892a925f3d5
--- /dev/null
+++ b/src/test/run-pass/rfc1598-generic-associated-types/whitespace-before-generics.rs
@@ -0,0 +1,35 @@
+// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(generic_associated_types)]
+
+// Checking the interaction with this other feature
+#![feature(associated_type_defaults)]
+
+use std::fmt::{Display, Debug};
+
+trait Foo {
+    type Assoc where Self: Sized;
+    type Assoc2 <T >where T: Display;
+    type WithDefault <T> = Iterator <Item=T> where T: Debug;
+    // No generics on this associated type
+    type NoGenerics;
+}
+
+struct Bar;
+
+impl Foo for Bar {
+    type Assoc = usize;
+    type Assoc2 <T> = Vec<T>;
+    type WithDefault<'a, T> = &'a Iterator<T>;
+    type NoGenerics = f64;
+}
+
+fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/empty_generics.rs b/src/test/ui/rfc1598-generic-associated-types/empty_generics.rs
new file mode 100644
index 00000000000..a80875d28b3
--- /dev/null
+++ b/src/test/ui/rfc1598-generic-associated-types/empty_generics.rs
@@ -0,0 +1,17 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(generic_associated_types)]
+
+trait Foo {
+    type Bar<,>;
+}
+
+fn main() {}
diff --git a/src/test/ui/rfc1598-generic-associated-types/generic_associated_types_equals.rs b/src/test/ui/rfc1598-generic-associated-types/generic_associated_types_equals.rs
new file mode 100644
index 00000000000..6cb2aaf47ae
--- /dev/null
+++ b/src/test/ui/rfc1598-generic-associated-types/generic_associated_types_equals.rs
@@ -0,0 +1,18 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(generic_associated_types)]
+
+trait Foo {
+    type Bar<T=usize>;
+    type X<T> where T = f64;
+}
+
+fn main() {}