Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

gleam / compiler-core / src / javascript / tests / modules.rs
3.9 kB 214 lines
1// SPDX-License-Identifier: Apache-2.0 2// SPDX-FileCopyrightText: 2021 The Gleam contributors 3 4use crate::assert_js; 5use crate::javascript::tests::CURRENT_PACKAGE; 6 7#[test] 8fn empty_module() { 9 // Renders an export statement to ensure it's an ESModule 10 assert_js!("", "export {}\n"); 11} 12 13#[test] 14fn unqualified_fn_call() { 15 assert_js!( 16 ("rocket_ship", r#"pub fn launch() { 1 }"#), 17 r#"import rocket_ship.{launch} 18pub fn go() { launch() } 19"#, 20 ); 21} 22 23#[test] 24fn aliased_unqualified_fn_call() { 25 assert_js!( 26 ("rocket_ship", r#"pub fn launch() { 1 }"#), 27 r#"import rocket_ship.{launch as boom_time} 28pub fn go() { boom_time() } 29"#, 30 ); 31} 32 33#[test] 34fn multiple_unqualified_fn_call() { 35 assert_js!( 36 ( 37 CURRENT_PACKAGE, 38 "rocket_ship", 39 r#" 40pub fn a() { 1 } 41pub fn b() { 2 }"# 42 ), 43 r#"import rocket_ship.{a,b as bb} 44pub fn go() { a() + bb() } 45"#, 46 ); 47} 48 49#[test] 50fn constant() { 51 assert_js!( 52 ("rocket_ship", r#"pub const x = 1"#), 53 r#" 54import rocket_ship 55pub fn go() { rocket_ship.x } 56"#, 57 ); 58} 59 60#[test] 61fn alias_aliased_constant() { 62 assert_js!( 63 ("rocket_ship", r#"pub const x = 1"#), 64 r#" 65import rocket_ship.{ x as y } 66pub const z = y 67"#, 68 ); 69} 70 71#[test] 72fn renamed_module() { 73 assert_js!( 74 ("x", r#"pub const v = 1"#), 75 r#" 76import x as y 77pub const z = y.v 78"#, 79 ); 80} 81 82#[test] 83fn nested_module_constant() { 84 assert_js!( 85 ( 86 CURRENT_PACKAGE, 87 "rocket_ship/launcher", 88 r#"pub const x = 1"# 89 ), 90 r#" 91import rocket_ship/launcher 92pub fn go() { launcher.x } 93"#, 94 ); 95} 96 97#[test] 98fn alias_constant() { 99 assert_js!( 100 ("rocket_ship", r#"pub const x = 1"#), 101 r#" 102import rocket_ship as boop 103pub fn go() { boop.x } 104"#, 105 ); 106} 107 108#[test] 109fn alias_fn_call() { 110 assert_js!( 111 ("rocket_ship", r#"pub fn go() { 1 }"#), 112 r#" 113import rocket_ship as boop 114pub fn go() { boop.go() } 115"#, 116 ); 117} 118 119#[test] 120fn nested_fn_call() { 121 assert_js!( 122 ("one/two", r#"pub fn go() { 1 }"#), 123 r#"import one/two 124pub fn go() { two.go() }"#, 125 ); 126} 127 128#[test] 129fn nested_nested_fn_call() { 130 assert_js!( 131 ("one/two/three", r#"pub fn go() { 1 }"#), 132 r#"import one/two/three 133pub fn go() { three.go() }"#, 134 ); 135} 136 137#[test] 138fn different_package_import() { 139 assert_js!( 140 ("other_package", "one", r#"pub fn go() { 1 }"#), 141 r#"import one 142pub fn go() { one.go() } 143"#, 144 ); 145} 146 147#[test] 148fn nested_same_package() { 149 assert_js!( 150 ("one/two/three", r#"pub fn go() { 1 }"#), 151 r#"import one/two/three 152pub fn go() { three.go() } 153"#, 154 ); 155} 156 157#[test] 158fn discarded_duplicate_import() { 159 assert_js!( 160 ("esa/rocket_ship", r#"pub fn go() { 1 }"#), 161 ("nasa/rocket_ship", r#"pub fn go() { 1 }"#), 162 r#" 163import esa/rocket_ship 164import nasa/rocket_ship as _nasa_rocket 165pub fn go() { rocket_ship.go() } 166"# 167 ); 168} 169 170#[test] 171fn discarded_duplicate_import_with_unqualified() { 172 assert_js!( 173 ("esa/rocket_ship", r#"pub fn go() { 1 }"#), 174 ("nasa/rocket_ship", r#"pub fn go() { 1 }"#), 175 r#" 176import esa/rocket_ship 177import nasa/rocket_ship.{go} as _nasa_rocket 178pub fn esa_go() { rocket_ship.go() } 179pub fn nasa_go() { go() } 180"# 181 ); 182} 183 184#[test] 185fn import_with_keyword() { 186 assert_js!( 187 ( 188 CURRENT_PACKAGE, 189 "rocket_ship", 190 r#" 191pub const class = 1 192pub const in = 2 193"# 194 ), 195 r#" 196import rocket_ship.{class, in as while} 197pub fn main() { 198 #(class, while) 199} 200"# 201 ); 202} 203 204// https://github.com/gleam-lang/gleam/issues/3004 205#[test] 206fn constant_module_access_with_keyword() { 207 assert_js!( 208 ("rocket_ship", r#"pub const class = 1"#), 209 r#" 210import rocket_ship 211pub const variable = rocket_ship.class 212"#, 213 ); 214}