about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-04-25 23:40:10 +0000
committerbors <bors@rust-lang.org>2015-04-25 23:40:10 +0000
commitda623844a9b3f9164723bf7ef2c4744b539af13f (patch)
tree5b5e46fff60c0f27dd2b3ee4d4060a6a441d560e
parent00c48d3779fb4c372d2dfe7a8654c6cd1e065511 (diff)
parentbeb373b317dcf25a5d9e3eab121b9fbda25a88d5 (diff)
downloadrust-da623844a9b3f9164723bf7ef2c4744b539af13f.tar.gz
rust-da623844a9b3f9164723bf7ef2c4744b539af13f.zip
Auto merge of #24718 - tamird:fix-quote-tests, r=alexcrichton
Sniped from @rprichard's work in #24537. r? @alexcrichton 
-rw-r--r--src/librustc/middle/astencode.rs27
-rw-r--r--src/test/compile-fail-fulldeps/qquote.rs55
-rw-r--r--src/test/parse-fail/qquote-1.rs70
-rw-r--r--src/test/parse-fail/qquote-2.rs63
-rw-r--r--src/test/run-fail/qquote.rs57
-rw-r--r--src/test/run-pass-fulldeps/qquote.rs92
6 files changed, 158 insertions, 206 deletions
diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs
index ee8373279d9..cc42bd9b08b 100644
--- a/src/librustc/middle/astencode.rs
+++ b/src/librustc/middle/astencode.rs
@@ -1835,29 +1835,31 @@ fn decode_item_ast(par_doc: rbml::Doc) -> ast::Item {
 }
 
 #[cfg(test)]
-trait fake_ext_ctxt {
+trait FakeExtCtxt {
+    fn call_site(&self) -> codemap::Span;
     fn cfg(&self) -> ast::CrateConfig;
-    fn parse_sess<'a>(&'a self) -> &'a parse::ParseSess;
-    fn call_site(&self) -> Span;
     fn ident_of(&self, st: &str) -> ast::Ident;
+    fn name_of(&self, st: &str) -> ast::Name;
+    fn parse_sess(&self) -> &parse::ParseSess;
 }
 
 #[cfg(test)]
-impl fake_ext_ctxt for parse::ParseSess {
-    fn cfg(&self) -> ast::CrateConfig {
-        Vec::new()
-    }
-    fn parse_sess<'a>(&'a self) -> &'a parse::ParseSess { self }
-    fn call_site(&self) -> Span {
+impl FakeExtCtxt for parse::ParseSess {
+    fn call_site(&self) -> codemap::Span {
         codemap::Span {
             lo: codemap::BytePos(0),
             hi: codemap::BytePos(0),
-            expn_id: codemap::NO_EXPANSION
+            expn_id: codemap::NO_EXPANSION,
         }
     }
+    fn cfg(&self) -> ast::CrateConfig { Vec::new() }
     fn ident_of(&self, st: &str) -> ast::Ident {
-        token::str_to_ident(st)
+        parse::token::str_to_ident(st)
+    }
+    fn name_of(&self, st: &str) -> ast::Name {
+        parse::token::intern(st)
     }
+    fn parse_sess(&self) -> &parse::ParseSess { self }
 }
 
 #[cfg(test)]
@@ -1883,7 +1885,7 @@ fn test_basic() {
         fn foo() {}
     ));
 }
-/* NOTE: When there's a snapshot, update this (yay quasiquoter!)
+
 #[test]
 fn test_smalltalk() {
     let cx = mk_ctxt();
@@ -1891,7 +1893,6 @@ fn test_smalltalk() {
         fn foo() -> isize { 3 + 4 } // first smalltalk program ever executed.
     ));
 }
-*/
 
 #[test]
 fn test_more() {
diff --git a/src/test/compile-fail-fulldeps/qquote.rs b/src/test/compile-fail-fulldeps/qquote.rs
new file mode 100644
index 00000000000..8b410dc2572
--- /dev/null
+++ b/src/test/compile-fail-fulldeps/qquote.rs
@@ -0,0 +1,55 @@
+// Copyright 2012-2014 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.
+
+// ignore-cross-compile
+
+#![feature(quote, rustc_private)]
+
+extern crate syntax;
+
+use syntax::ast;
+use syntax::codemap;
+use syntax::parse;
+use syntax::print::pprust;
+
+trait FakeExtCtxt {
+    fn call_site(&self) -> codemap::Span;
+    fn cfg(&self) -> ast::CrateConfig;
+    fn ident_of(&self, st: &str) -> ast::Ident;
+    fn name_of(&self, st: &str) -> ast::Name;
+    fn parse_sess(&self) -> &parse::ParseSess;
+}
+
+impl FakeExtCtxt for parse::ParseSess {
+    fn call_site(&self) -> codemap::Span {
+        codemap::Span {
+            lo: codemap::BytePos(0),
+            hi: codemap::BytePos(0),
+            expn_id: codemap::NO_EXPANSION,
+        }
+    }
+    fn cfg(&self) -> ast::CrateConfig { Vec::new() }
+    fn ident_of(&self, st: &str) -> ast::Ident {
+        parse::token::str_to_ident(st)
+    }
+    fn name_of(&self, st: &str) -> ast::Name {
+        parse::token::intern(st)
+    }
+    fn parse_sess(&self) -> &parse::ParseSess { self }
+}
+
+fn main() {
+    let cx = parse::new_parse_sess();
+
+    assert_eq!(pprust::expr_to_string(&*quote_expr!(&cx, 23)), "23");
+
+    let expr = quote_expr!(&cx, 2 - $abcd + 7); //~ ERROR unresolved name `abcd`
+    assert_eq!(pprust::expr_to_string(&*expr), "2 - $abcd + 7");
+}
diff --git a/src/test/parse-fail/qquote-1.rs b/src/test/parse-fail/qquote-1.rs
deleted file mode 100644
index e30308b295a..00000000000
--- a/src/test/parse-fail/qquote-1.rs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2012-2014 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.
-
-// compile-flags: -Z parse-only
-
-// ignore-test Can't use syntax crate here
-
-#![feature(quote)]
-
-extern crate syntax;
-
-use io::*;
-
-use syntax::diagnostic;
-use syntax::ast;
-use syntax::codemap;
-use syntax::parse;
-use syntax::print::*;
-
-
-trait fake_ext_ctxt {
-    fn cfg() -> ast::CrateConfig;
-    fn parse_sess() -> parse::parse_sess;
-    fn call_site() -> span;
-    fn ident_of(st: &str) -> ast::ident;
-}
-
-type fake_session = parse::parse_sess;
-
-impl fake_ext_ctxt for fake_session {
-    fn cfg() -> ast::CrateConfig { Vec::new() }
-    fn parse_sess() -> parse::parse_sess { self }
-    fn call_site() -> span {
-        codemap::span {
-            lo: codemap::BytePos(0),
-            hi: codemap::BytePos(0),
-            expn_id: NO_EXPANSION
-        }
-    }
-    fn ident_of(st: &str) -> ast::ident {
-        self.interner.intern(st)
-    }
-}
-
-fn mk_ctxt() -> fake_ext_ctxt {
-    parse::new_parse_sess(None) as fake_ext_ctxt
-}
-
-
-
-fn main() {
-    let cx = mk_ctxt();
-
-    let abc = quote_expr!(cx, 23);
-    check_pp(abc,  pprust::print_expr, "23");
-
-    let expr3 = quote_expr!(cx, 2 - $abcd + 7); //~ ERROR unresolved name: abcd
-    check_pp(expr3,  pprust::print_expr, "2 - 23 + 7");
-}
-
-fn check_pp<T>(expr: T, f: |pprust::ps, T|, expect: str) {
-    panic!();
-}
diff --git a/src/test/parse-fail/qquote-2.rs b/src/test/parse-fail/qquote-2.rs
deleted file mode 100644
index ac501d31bee..00000000000
--- a/src/test/parse-fail/qquote-2.rs
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2012-2014 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.
-
-// compile-flags: -Z parse-only
-
-// ignore-test Can't use syntax crate here
-
-#![feature(quote)]
-
-extern crate syntax;
-
-use syntax::diagnostic;
-use syntax::ast;
-use syntax::codemap;
-use syntax::parse::parser;
-use syntax::print::*;
-
-trait fake_ext_ctxt {
-    fn cfg() -> ast::CrateConfig;
-    fn parse_sess() -> parse::parse_sess;
-    fn call_site() -> span;
-    fn ident_of(st: &str) -> ast::ident;
-}
-
-type fake_session = parse::parse_sess;
-
-impl fake_ext_ctxt for fake_session {
-    fn cfg() -> ast::CrateConfig { Vec::new() }
-    fn parse_sess() -> parse::parse_sess { self }
-    fn call_site() -> span {
-        codemap::span {
-            lo: codemap::BytePos(0),
-            hi: codemap::BytePos(0),
-            expn_id: codemap::NO_EXPANSION
-        }
-    }
-    fn ident_of(st: &str) -> ast::ident {
-        self.interner.intern(st)
-    }
-}
-
-fn mk_ctxt() -> fake_ext_ctxt {
-    parse::new_parse_sess(None) as fake_ext_ctxt
-}
-
-
-fn main() {
-    let cx = mk_ctxt();
-
-    let stmt = quote_stmt!(cx, let x isize = 20;); //~ ERROR expected end-of-string
-    check_pp(*stmt,  pprust::print_stmt, "");
-}
-
-fn check_pp<T>(expr: T, f: |pprust::ps, T|, expect: str) {
-    panic!();
-}
diff --git a/src/test/run-fail/qquote.rs b/src/test/run-fail/qquote.rs
new file mode 100644
index 00000000000..fe582bc9bf7
--- /dev/null
+++ b/src/test/run-fail/qquote.rs
@@ -0,0 +1,57 @@
+// Copyright 2012-2014 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.
+
+// ignore-cross-compile
+
+// error-pattern:expected identifier, found keyword `let`
+
+#![feature(quote, rustc_private)]
+
+extern crate syntax;
+
+use syntax::ast;
+use syntax::codemap;
+use syntax::parse;
+use syntax::print::pprust;
+
+trait FakeExtCtxt {
+    fn call_site(&self) -> codemap::Span;
+    fn cfg(&self) -> ast::CrateConfig;
+    fn ident_of(&self, st: &str) -> ast::Ident;
+    fn name_of(&self, st: &str) -> ast::Name;
+    fn parse_sess(&self) -> &parse::ParseSess;
+}
+
+impl FakeExtCtxt for parse::ParseSess {
+    fn call_site(&self) -> codemap::Span {
+        codemap::Span {
+            lo: codemap::BytePos(0),
+            hi: codemap::BytePos(0),
+            expn_id: codemap::NO_EXPANSION,
+        }
+    }
+    fn cfg(&self) -> ast::CrateConfig { Vec::new() }
+    fn ident_of(&self, st: &str) -> ast::Ident {
+        parse::token::str_to_ident(st)
+    }
+    fn name_of(&self, st: &str) -> ast::Name {
+        parse::token::intern(st)
+    }
+    fn parse_sess(&self) -> &parse::ParseSess { self }
+}
+
+fn main() {
+    let cx = parse::new_parse_sess();
+
+    assert_eq!(pprust::expr_to_string(&*quote_expr!(&cx, 23)), "23");
+
+    let expr = quote_expr!(&cx, let x isize = 20;);
+    assert_eq!(pprust::expr_to_string(&*expr), "let x isize = 20;");
+}
diff --git a/src/test/run-pass-fulldeps/qquote.rs b/src/test/run-pass-fulldeps/qquote.rs
index 710b3b07549..995dd80df65 100644
--- a/src/test/run-pass-fulldeps/qquote.rs
+++ b/src/test/run-pass-fulldeps/qquote.rs
@@ -10,86 +10,58 @@
 
 // ignore-cross-compile
 // ignore-pretty
-// ignore-test
 
-#![feature(quote)]
+#![feature(quote, rustc_private)]
 
 extern crate syntax;
 
-use std::io::*;
-
-use syntax::diagnostic;
 use syntax::ast;
 use syntax::codemap;
-use syntax::codemap::span;
 use syntax::parse;
-use syntax::print::*;
-
-
-trait fake_ext_ctxt {
-    fn cfg() -> ast::CrateConfig;
-    fn parse_sess() -> parse::parse_sess;
-    fn call_site() -> span;
-    fn ident_of(st: &str) -> ast::ident;
+use syntax::print::pprust;
+
+trait FakeExtCtxt {
+    fn call_site(&self) -> codemap::Span;
+    fn cfg(&self) -> ast::CrateConfig;
+    fn ident_of(&self, st: &str) -> ast::Ident;
+    fn name_of(&self, st: &str) -> ast::Name;
+    fn parse_sess(&self) -> &parse::ParseSess;
 }
 
-type fake_session = parse::parse_sess;
-
-impl fake_ext_ctxt for fake_session {
-    fn cfg() -> ast::CrateConfig { Vec::new() }
-    fn parse_sess() -> parse::parse_sess { self }
-    fn call_site() -> span {
-        codemap::span {
+impl FakeExtCtxt for parse::ParseSess {
+    fn call_site(&self) -> codemap::Span {
+        codemap::Span {
             lo: codemap::BytePos(0),
             hi: codemap::BytePos(0),
-            expn_id: codemap::NO_EXPANSION
+            expn_id: codemap::NO_EXPANSION,
         }
     }
-    fn ident_of(st: &str) -> ast::ident {
-        self.interner.intern(st)
+    fn cfg(&self) -> ast::CrateConfig { Vec::new() }
+    fn ident_of(&self, st: &str) -> ast::Ident {
+        parse::token::str_to_ident(st)
     }
-}
-
-fn mk_ctxt() -> fake_ext_ctxt {
-    parse::new_parse_sess(None) as fake_ext_ctxt
+    fn name_of(&self, st: &str) -> ast::Name {
+        parse::token::intern(st)
+    }
+    fn parse_sess(&self) -> &parse::ParseSess { self }
 }
 
 fn main() {
-    let cx = mk_ctxt();
+    let cx = parse::new_parse_sess();
 
-    let abc = quote_expr!(cx, 23);
-    check_pp(ext_cx, abc,  pprust::print_expr, "23".to_string());
+    assert_eq!(pprust::expr_to_string(&*quote_expr!(&cx, 23)), "23");
+    assert_eq!(pprust::pat_to_string(&*quote_pat!(&cx, Some(_))), "Some(_)");
+    assert_eq!(pprust::ty_to_string(&*quote_ty!(&cx, isize)), "isize");
 
+    let arm = quote_arm!(&cx, (ref x, ref y) => (x, y),);
+    assert_eq!(pprust::arm_to_string(&arm), " (ref x, ref y) => (x, y),");
 
-    let ty = quote_ty!(cx, isize);
-    check_pp(ext_cx, ty, pprust::print_type, "isize".to_string());
+    let attr = quote_attr!(&cx, #![cfg(foo = "bar")]);
+    assert_eq!(pprust::attr_to_string(&attr), "#![cfg(foo = \"bar\")]");
 
-    let item = quote_item!(cx, static x : isize = 10;).get();
-    check_pp(ext_cx, item, pprust::print_item, "static x: isize = 10;".to_string());
+    let item = quote_item!(&cx, static x : isize = 10;).unwrap();
+    assert_eq!(pprust::item_to_string(&*item), "static x: isize = 10;");
 
-    let stmt = quote_stmt!(cx, let x = 20;);
-    check_pp(ext_cx, *stmt, pprust::print_stmt, "let x = 20;".to_string());
-
-    let pat = quote_pat!(cx, Some(_));
-    check_pp(ext_cx, pat, pprust::print_pat, "Some(_)".to_string());
-
-    let arm = quote_arm!(cx, (ref x, ref y) => (x, y));
-    check_pp(ext_cx, arm, pprust::print_stmt, "(ref x, ref y) = (x, y)".to_string());
-
-    let attr = quote_attr!(cx, #![cfg(foo = "bar")]);
-    check_pp(ext_cx, attr, pprust::print_attribute, "#![cfg(foo = "bar")]".to_string());
-}
-
-fn check_pp<T>(cx: fake_ext_ctxt,
-               expr: T, f: |pprust::ps, T|, expect: String) {
-    let s = io::with_str_writer(|wr| {
-        let pp = pprust::rust_printer(wr, cx.parse_sess().interner);
-        f(pp, expr);
-        pp::eof(pp.s);
-    });
-    stdout().write_line(s);
-    if expect != "".to_string() {
-        println!("expect: '%s', got: '%s'", expect, s);
-        assert_eq!(s, expect);
-    }
+    let stmt = quote_stmt!(&cx, let x = 20;).unwrap();
+    assert_eq!(pprust::stmt_to_string(&*stmt), "let x = 20;");
 }