diff --git a/src/manifest/mod.rs b/src/manifest/mod.rs index 3dfb612..25047d6 100644 --- a/src/manifest/mod.rs +++ b/src/manifest/mod.rs @@ -349,7 +349,7 @@ impl CrateData { } /// Get the prefix for output file names - fn name_prefix(&self) -> String { + pub fn name_prefix(&self) -> String { match &self.out_name { Some(value) => value.clone(), None => self.crate_name(), diff --git a/tests/all/manifest.rs b/tests/all/manifest.rs index 31ef3ab..099ad31 100644 --- a/tests/all/manifest.rs +++ b/tests/all/manifest.rs @@ -21,6 +21,22 @@ fn it_gets_the_crate_name_provided_path() { assert_eq!(crate_data.crate_name(), "js_hello_world"); } +#[test] +fn it_gets_the_default_name_prefix() { + let path = &PathBuf::from("."); + let crate_data = manifest::CrateData::new(&path, None).unwrap(); + let name = crate_data.name_prefix(); + assert_eq!(name, "wasm_pack"); +} + +#[test] +fn it_gets_the_name_prefix_passed_from_cli() { + let path = &PathBuf::from("."); + let crate_data = manifest::CrateData::new(&path, Some("index".to_owned())).unwrap(); + let name = crate_data.name_prefix(); + assert_eq!(name, "index"); +} + #[test] fn it_checks_has_cdylib_default_path() { let fixture = fixture::no_cdylib(); @@ -215,6 +231,37 @@ fn it_creates_a_pkg_json_with_correct_files_on_nomodules() { assert_eq!(actual_files, expected_files); } +#[test] +fn it_creates_a_package_json_with_correct_files_when_out_name_is_provided() { + let fixture = fixture::js_hello_world(); + let out_dir = fixture.path.join("pkg"); + let crate_data = manifest::CrateData::new(&fixture.path, Some("index".to_owned())).unwrap(); + wasm_pack::command::utils::create_pkg_dir(&out_dir).unwrap(); + assert!(crate_data + .write_package_json(&out_dir, &None, false, &Target::Bundler) + .is_ok()); + let package_json_path = &fixture.path.join("pkg").join("package.json"); + fs::metadata(package_json_path).unwrap(); + utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap(); + let pkg = utils::manifest::read_package_json(&fixture.path, &out_dir).unwrap(); + assert_eq!(pkg.name, "js-hello-world"); + assert_eq!(pkg.repository.ty, "git"); + assert_eq!( + pkg.repository.url, + "https://github.com/rustwasm/wasm-pack.git" + ); + assert_eq!(pkg.module, "index.js"); + assert_eq!(pkg.types, "index.d.ts"); + assert_eq!(pkg.side_effects, "false"); + + let actual_files: HashSet<String> = pkg.files.into_iter().collect(); + let expected_files: HashSet<String> = ["index_bg.wasm", "index.d.ts", "index.js"] + .iter() + .map(|&s| String::from(s)) + .collect(); + assert_eq!(actual_files, expected_files); +} + #[test] fn it_creates_a_pkg_json_in_out_dir() { let fixture = fixture::js_hello_world();