Add tests.

This commit is contained in:
Jeffrey Seyfried 2016-11-28 07:57:17 +00:00
parent ed9a09d40c
commit ff621ec70e
5 changed files with 93 additions and 43 deletions

View File

@ -0,0 +1,42 @@
// Copyright 2016 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.
// aux-build:two_macros.rs
#![feature(use_extern_macros)]
extern crate two_macros;
mod foo {
pub mod bar {
pub use two_macros::m;
}
}
fn f() {
use foo::*; //~ NOTE could also resolve to the name imported here
bar::m! { //~ ERROR ambiguous
//~| NOTE macro-expanded items do not shadow when used in a macro invocation path
mod bar { pub use two_macros::m; } //~ NOTE could resolve to the name defined here
//~^^^ NOTE in this expansion
}
}
pub mod baz { //~ NOTE could also resolve to the name defined here
pub use two_macros::m;
}
fn g() {
baz::m! { //~ ERROR ambiguous
//~| NOTE macro-expanded items do not shadow when used in a macro invocation path
mod baz { pub use two_macros::m; } //~ NOTE could resolve to the name defined here
//~^^^ NOTE in this expansion
}
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
fn main() {
globnar::brotz!(); //~ ERROR expected macro name without module separators
::foo!(); //~ ERROR expected macro name without module separators
foo::<T>!(); //~ ERROR expected macro name without module separators
globnar::brotz!(); //~ ERROR non-ident macro paths are experimental
::foo!(); //~ ERROR non-ident macro paths are experimental
foo::<T>!(); //~ ERROR type parameters are not allowed on macros
}

View File

@ -1,38 +0,0 @@
// Copyright 2016 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.
::foo::bar!(); //~ ERROR expected macro name without module separators
foo::bar!(); //~ ERROR expected macro name without module separators
trait T {
foo::bar!(); //~ ERROR expected macro name without module separators
::foo::bar!(); //~ ERROR expected macro name without module separators
}
struct S {
x: foo::bar!(), //~ ERROR expected macro name without module separators
y: ::foo::bar!(), //~ ERROR expected macro name without module separators
}
impl S {
foo::bar!(); //~ ERROR expected macro name without module separators
::foo::bar!(); //~ ERROR expected macro name without module separators
}
fn main() {
foo::bar!(); //~ ERROR expected macro name without module separators
::foo::bar!(); //~ ERROR expected macro name without module separators
let _ = foo::bar!(); //~ ERROR expected macro name without module separators
let _ = ::foo::bar!(); //~ ERROR expected macro name without module separators
let foo::bar!() = 0; //~ ERROR expected macro name without module separators
let ::foo::bar!() = 0; //~ ERROR expected macro name without module separators
}

View File

@ -9,7 +9,7 @@
// except according to those terms.
#[macro_export]
macro_rules! macro_one { () => ("one") }
macro_rules! macro_one { ($($t:tt)*) => ($($t)*) }
#[macro_export]
macro_rules! macro_two { () => ("two") }
macro_rules! macro_two { ($($t:tt)*) => ($($t)*) }

View File

@ -0,0 +1,46 @@
// Copyright 2016 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.
// aux-build:two_macros.rs
#![feature(use_extern_macros)]
extern crate two_macros;
::two_macros::macro_one!();
two_macros::macro_one!();
mod foo { pub use two_macros::macro_one as bar; }
trait T {
foo::bar!();
::foo::bar!();
}
struct S {
x: foo::bar!(i32),
y: ::foo::bar!(i32),
}
impl S {
foo::bar!();
::foo::bar!();
}
fn main() {
foo::bar!();
::foo::bar!();
let _ = foo::bar!(0);
let _ = ::foo::bar!(0);
let foo::bar!(_) = 0;
let ::foo::bar!(_) = 0;
}