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| {
|
|
|
|
let ast = parser.parse_line(code).unwrap();
|
|
|
|
assert!(is_ast_import(&ast));
|
|
|
|
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| {
|
|
|
|
let ast = parser.parse_line(code).unwrap();
|
|
|
|
assert!(!is_ast_import(&ast));
|
|
|
|
assert!(ast_as_import_match(&ast).is_none());
|
|
|
|
};
|
|
|
|
|
2020-07-20 18:35:43 +03:00
|
|
|
// expect_import("import"); // TODO [mwu] https://github.com/enso-org/enso/issues/1016
|
2020-07-13 14:58:22 +03:00
|
|
|
expect_import("import Foo");
|
|
|
|
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");
|
|
|
|
expect_import("from Foo import all hiding Bar");
|
|
|
|
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-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| {
|
|
|
|
let ast = parser.parse_line(code).unwrap();
|
|
|
|
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| {
|
|
|
|
let ast = parser.parse_line(code).unwrap();
|
|
|
|
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");
|
|
|
|
// expect_lambda("(a->b)->c"); // TODO: Failing due to internal parser error: java.lang.NullPointerException
|
|
|
|
|
|
|
|
expect_not_lambda("(a->b)");
|
|
|
|
expect_not_lambda("a+b");
|
|
|
|
expect_not_lambda("'a+b'");
|
|
|
|
expect_not_lambda("497");
|
|
|
|
}
|