2020-04-29 20:29:37 +03:00
|
|
|
use parser::prelude::*;
|
|
|
|
|
|
|
|
use parser::Parser;
|
|
|
|
use wasm_bindgen_test::wasm_bindgen_test;
|
|
|
|
use wasm_bindgen_test::wasm_bindgen_test_configure;
|
|
|
|
|
|
|
|
wasm_bindgen_test_configure!(run_in_browser);
|
|
|
|
|
2020-07-13 14:58:22 +03:00
|
|
|
#[wasm_bindgen_test]
|
|
|
|
fn import_utilities() {
|
|
|
|
use ast::macros::ast_as_import_match;
|
|
|
|
use ast::macros::is_ast_import;
|
|
|
|
use ast::macros::is_match_import;
|
|
|
|
|
|
|
|
let parser = Parser::new_or_panic();
|
|
|
|
let expect_import = |code:&str| {
|
2021-08-05 11:33:06 +03:00
|
|
|
let ast = parser.parse_line(code).unwrap();
|
2021-07-21 10:57:08 +03:00
|
|
|
assert!(is_ast_import(&ast), "Not Ast import: {:?}", ast);
|
2020-07-13 14:58:22 +03:00
|
|
|
let ast_match = ast_as_import_match(&ast).unwrap();
|
|
|
|
assert_eq!(&ast,ast_match.ast());
|
|
|
|
assert!(is_match_import(&ast_match));
|
|
|
|
};
|
|
|
|
|
|
|
|
let expect_not_import = |code:&str| {
|
2021-08-05 11:33:06 +03:00
|
|
|
let ast = parser.parse_line(code).unwrap();
|
2020-07-13 14:58:22 +03:00
|
|
|
assert!(!is_ast_import(&ast));
|
|
|
|
assert!(ast_as_import_match(&ast).is_none());
|
|
|
|
};
|
|
|
|
|
2021-03-02 16:21:50 +03:00
|
|
|
expect_import("import");
|
2020-07-13 14:58:22 +03:00
|
|
|
expect_import("import Foo");
|
2021-07-21 10:57:08 +03:00
|
|
|
expect_import("import foo.Foo.Bar");
|
|
|
|
expect_import("import foo.Foo.Bar");
|
2020-07-13 14:58:22 +03:00
|
|
|
expect_import("import Foo.Bar");
|
|
|
|
expect_import("import Foo.Bar.Baz");
|
2021-02-15 19:48:41 +03:00
|
|
|
expect_import("from Foo import Bar");
|
2021-07-21 10:57:08 +03:00
|
|
|
expect_import("from foo.Foo import all hiding Bar");
|
2021-02-15 19:48:41 +03:00
|
|
|
expect_import("from Base.Data.List import all hiding Cons, Nil");
|
2020-07-13 14:58:22 +03:00
|
|
|
|
|
|
|
expect_not_import("type Foo");
|
|
|
|
expect_not_import("type Foo as Bar");
|
|
|
|
expect_not_import("if Foo then Bar else Baz");
|
|
|
|
expect_not_import("Foo.Bar.Baz");
|
2021-03-02 16:21:50 +03:00
|
|
|
expect_not_import("->");
|
|
|
|
expect_not_import("export");
|
2021-02-15 19:48:41 +03:00
|
|
|
expect_not_import("export Foo");
|
|
|
|
expect_not_import("from Foo export all hiding Bar");
|
2020-07-13 14:58:22 +03:00
|
|
|
}
|
|
|
|
|
2020-04-29 20:29:37 +03:00
|
|
|
#[wasm_bindgen_test]
|
|
|
|
fn recognizing_lambdas() {
|
|
|
|
let parser = Parser::new_or_panic();
|
|
|
|
|
|
|
|
let expect_lambda = |code:&str, arg:&str, body:&str| {
|
2021-08-05 11:33:06 +03:00
|
|
|
let ast = parser.parse_line(code).unwrap();
|
2020-04-29 20:29:37 +03:00
|
|
|
let lambda = ast::macros::as_lambda(&ast).expect("failed to recognize lambda");
|
|
|
|
assert_eq!(lambda.arg.repr(), arg);
|
|
|
|
assert_eq!(lambda.body.repr(), body);
|
|
|
|
assert_eq!(*lambda.arg, ast.get_traversing(&lambda.arg.crumbs).unwrap());
|
|
|
|
assert_eq!(*lambda.body, ast.get_traversing(&lambda.body.crumbs).unwrap());
|
|
|
|
};
|
|
|
|
let expect_not_lambda = |code:&str| {
|
2021-08-05 11:33:06 +03:00
|
|
|
let ast = parser.parse_line(code).unwrap();
|
2020-04-29 20:29:37 +03:00
|
|
|
assert!(ast::macros::as_lambda_match(&ast).is_none(), "wrongly recognized a lambda");
|
|
|
|
};
|
|
|
|
|
|
|
|
expect_lambda("a->b", "a", "b");
|
|
|
|
expect_lambda("foo->4+(4)", "foo", "4+(4)");
|
|
|
|
expect_lambda("a->b->c", "a", "b->c");
|
2021-03-02 16:21:50 +03:00
|
|
|
expect_lambda("(a->b)->c", "(a->b)", "c");
|
2020-04-29 20:29:37 +03:00
|
|
|
|
|
|
|
expect_not_lambda("(a->b)");
|
|
|
|
expect_not_lambda("a+b");
|
|
|
|
expect_not_lambda("'a+b'");
|
|
|
|
expect_not_lambda("497");
|
|
|
|
}
|