From 0d9758c1dd7e5d2e2c165dd1147294b637ac44d0 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 15 Jun 2015 19:15:20 -0400 Subject: [PATCH] Add a test for condition matching --- src/normalize/macro_expand/test.rs | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/normalize/macro_expand/test.rs b/src/normalize/macro_expand/test.rs index 0773a38..8db7b2c 100644 --- a/src/normalize/macro_expand/test.rs +++ b/src/normalize/macro_expand/test.rs @@ -33,3 +33,42 @@ grammar Foo { assert_eq!(actual, expected); } + +#[test] +fn test_if_match() { + let grammar = parser::parse_grammar(" +grammar Foo { + Expr = { + A if E == \"A*C\"; + B if E ~~ \"^A*C$\"; + C if E != \"A*C\"; + D if E !~ \"^A*C$\"; + }; + + Expr1 = Expr<\"A*C\">; + Expr2 = Expr<\"AAC\">; + Expr3 = Expr<\"ABC\">; +} +").unwrap(); + + let actual = expand_macros(grammar).unwrap(); + + let expected = parser::parse_grammar(" +grammar Foo { + Expr1 = `Expr<\"A*C\">`; + Expr2 = `Expr<\"AAC\">`; + Expr3 = `Expr<\"ABC\">`; + + `Expr<\"ABC\">` = { C; D; }; + `Expr<\"AAC\">` = { B; C; }; + `Expr<\"A*C\">` = { A; D; }; +} +").unwrap(); + + println!("Actual:"); + println!("{:#?}", actual); + println!("Expected:"); + println!("{:#?}", expected); + + assert_eq!(actual, expected); +}