diff --git a/crates/oxc_resolver/Cargo.toml b/crates/oxc_resolver/Cargo.toml index 505741963..51cc18cc1 100644 --- a/crates/oxc_resolver/Cargo.toml +++ b/crates/oxc_resolver/Cargo.toml @@ -14,10 +14,10 @@ categories.workspace = true [dependencies] dashmap = { workspace = true } -serde = { workspace = true, features = ["derive"] } +serde = { workspace = true } serde_json = { workspace = true } rustc-hash = { workspace = true } -indexmap = { workspace = true, features = ["serde"] } +indexmap = { workspace = true, features = ["serde"] } # serde for Deserialize from package.json dunce = "1.0.4" # Use `std::sync::OnceLock::get_or_try_init` when it is stable. once_cell = "1.18.0" diff --git a/crates/oxc_resolver/src/tests/browser_field.rs b/crates/oxc_resolver/src/tests/browser_field.rs index 55fe42bfc..1becc2fca 100644 --- a/crates/oxc_resolver/src/tests/browser_field.rs +++ b/crates/oxc_resolver/src/tests/browser_field.rs @@ -1,16 +1,10 @@ //! -use std::path::PathBuf; - use crate::{ResolveError, ResolveOptions, Resolver}; -fn fixture() -> PathBuf { - super::fixture().join("browser-module") -} - #[test] fn ignore() { - let f = fixture(); + let f = super::fixture().join("browser-module"); let resolver = Resolver::new(ResolveOptions { alias_fields: vec!["browser".into(), "innerBrowser1".into(), "innerBrowser2".into()], @@ -34,7 +28,7 @@ fn ignore() { #[test] fn replace_file() { - let f = fixture(); + let f = super::fixture().join("browser-module"); let resolver = Resolver::new(ResolveOptions { alias_fields: vec!["browser".into()], diff --git a/crates/oxc_resolver/src/tests/exports_field.rs b/crates/oxc_resolver/src/tests/exports_field.rs index c70530555..b5b708779 100644 --- a/crates/oxc_resolver/src/tests/exports_field.rs +++ b/crates/oxc_resolver/src/tests/exports_field.rs @@ -76,8 +76,8 @@ fn test() { } } -#[test] // resolve using exports field, not a browser field #1 +#[test] fn exports_not_browser_field1() { let f = super::fixture().join("exports-field"); @@ -92,8 +92,8 @@ fn exports_not_browser_field1() { assert_eq!(resolved_path, Ok(f.join("node_modules/exports-field/lib/lib2/main.js"))); } -#[test] // resolve using exports field and a browser alias field #2 +#[test] fn exports_not_browser_field2() { let f2 = super::fixture().join("exports-field2"); @@ -108,8 +108,8 @@ fn exports_not_browser_field2() { assert_eq!(resolved_path, Ok(f2.join("node_modules/exports-field/lib/browser.js"))); } -#[test] // should resolve extension without fullySpecified +#[test] fn extension_without_fully_specified() { let f2 = super::fixture().join("exports-field2"); diff --git a/crates/oxc_resolver/src/tests/extension_alias.rs b/crates/oxc_resolver/src/tests/extension_alias.rs index a01716e3e..86afab738 100644 --- a/crates/oxc_resolver/src/tests/extension_alias.rs +++ b/crates/oxc_resolver/src/tests/extension_alias.rs @@ -1,16 +1,10 @@ //! -use std::path::PathBuf; - use crate::{ResolveError, ResolveOptions, Resolver}; -fn fixture() -> PathBuf { - super::fixture().join("extension-alias") -} - #[test] fn extension_alias() { - let f = fixture(); + let f = super::fixture().join("extension-alias"); let resolver = Resolver::new(ResolveOptions { extensions: vec![".js".into()], @@ -46,17 +40,17 @@ fn extension_alias() { } } +// should not apply extension alias to extensions or mainFiles field #[test] fn not_apply_to_extension_nor_main_files() { - // should not apply extension alias to extensions or mainFiles field - let options = ResolveOptions { + let f = super::fixture().join("extension-alias"); + + let resolver = Resolver::new(ResolveOptions { extensions: vec![".js".into()], main_files: vec!["index.js".into()], extension_alias: vec![(".js".into(), vec![])], ..ResolveOptions::default() - }; - let resolver = Resolver::new(options); - let f = fixture(); + }); #[rustfmt::skip] let pass = [ diff --git a/crates/oxc_resolver/src/tests/extensions.rs b/crates/oxc_resolver/src/tests/extensions.rs index 85ed958fa..668ba7d05 100644 --- a/crates/oxc_resolver/src/tests/extensions.rs +++ b/crates/oxc_resolver/src/tests/extensions.rs @@ -1,16 +1,10 @@ //! -use std::path::PathBuf; - use crate::{EnforceExtension, Resolution, ResolveError, ResolveOptions, Resolver}; -fn fixture() -> PathBuf { - super::fixture().join("extensions") -} - #[test] fn extensions() { - let f = fixture(); + let f = super::fixture().join("extensions"); let resolver = Resolver::new(ResolveOptions { extensions: vec![".ts".into(), ".js".into()], @@ -44,10 +38,10 @@ fn extensions() { } } -#[test] // should default enforceExtension to true when extensions includes an empty string +#[test] fn default_enforce_extension() { - let f = fixture(); + let f = super::fixture().join("extensions"); let resolved = Resolver::new(ResolveOptions { extensions: vec![".ts".into(), String::new(), ".js".into()], @@ -59,10 +53,10 @@ fn default_enforce_extension() { // TODO: need to match missingDependencies returned from the resolve function } -#[test] // should respect enforceExtension when extensions includes an empty string +#[test] fn respect_enforce_extension() { - let f = fixture(); + let f = super::fixture().join("extensions"); let resolved = Resolver::new(ResolveOptions { enforce_extension: EnforceExtension::Disabled, @@ -77,7 +71,7 @@ fn respect_enforce_extension() { // Test for `.d.ts`, not part of enhanced-resolve. #[test] fn multi_dot_extension() { - let f = fixture(); + let f = super::fixture().join("extensions"); let resolver = Resolver::new(ResolveOptions { extensions: vec![".a.b.c".into(), ".d.ts".into(), ".ts".into(), ".js".into()], diff --git a/crates/oxc_resolver/src/tests/incorrect_description_file.rs b/crates/oxc_resolver/src/tests/incorrect_description_file.rs index fb29d94c7..cfac05b50 100644 --- a/crates/oxc_resolver/src/tests/incorrect_description_file.rs +++ b/crates/oxc_resolver/src/tests/incorrect_description_file.rs @@ -1,19 +1,15 @@ //! -use std::{env, path::PathBuf}; +use std::env; use crate::{JSONError, Resolution, ResolveError, ResolveOptions, Resolver}; -fn fixture() -> PathBuf { - super::fixture().join("incorrect-package") -} - // TODO: add `ctx with fileDependencies and then check file dependencies +// should not resolve main in incorrect description file #1 #[test] fn incorrect_description_file_1() { - // should not resolve main in incorrect description file #1 - let f = fixture(); + let f = super::fixture().join("incorrect-package"); let resolution = Resolver::default().resolve(f.join("pack1"), "."); let error = ResolveError::JSON(JSONError { path: f.join("pack1/package.json"), @@ -24,10 +20,10 @@ fn incorrect_description_file_1() { assert_eq!(resolution, Err(error)); } +// should not resolve main in incorrect description file #2 #[test] fn incorrect_description_file_2() { - // should not resolve main in incorrect description file #2 - let f = fixture(); + let f = super::fixture().join("incorrect-package"); let resolution = Resolver::default().resolve(f.join("pack2"), "."); let error = ResolveError::JSON(JSONError { path: f.join("pack2/package.json"), @@ -38,10 +34,10 @@ fn incorrect_description_file_2() { assert_eq!(resolution, Err(error)); } +// should not resolve main in incorrect description file #3 #[test] fn incorrect_description_file_3() { - // should not resolve main in incorrect description file #3 - let f = fixture(); + let f = super::fixture().join("incorrect-package"); let resolution = Resolver::default().resolve(f.join("pack2"), "."); assert!(resolution.is_err()); } diff --git a/crates/oxc_resolver/src/tests/restrictions.rs b/crates/oxc_resolver/src/tests/restrictions.rs index eeec24b44..b294af11f 100644 --- a/crates/oxc_resolver/src/tests/restrictions.rs +++ b/crates/oxc_resolver/src/tests/restrictions.rs @@ -8,8 +8,8 @@ use crate::{ResolveError, ResolveOptions, Resolver, Restriction}; // * should try to find alternative #2 // * should try to find alternative #3 -#[test] // should respect string restriction +#[test] fn restriction1() { let fixture = super::fixture(); let f = fixture.join("restrictions"); diff --git a/crates/oxc_resolver/src/tests/roots.rs b/crates/oxc_resolver/src/tests/roots.rs index efdfb2583..21eddf05c 100644 --- a/crates/oxc_resolver/src/tests/roots.rs +++ b/crates/oxc_resolver/src/tests/roots.rs @@ -60,7 +60,6 @@ fn resolve_to_context() { #[test] fn prefer_absolute() { let f = super::fixture(); - let resolver = Resolver::new(ResolveOptions { extensions: vec![".js".into()], alias: vec![("foo".into(), vec![AliasValue::Path("/fixtures".into())])], diff --git a/crates/oxc_resolver/src/tests/scoped_packages.rs b/crates/oxc_resolver/src/tests/scoped_packages.rs index 761cb5b20..0d8f97db3 100644 --- a/crates/oxc_resolver/src/tests/scoped_packages.rs +++ b/crates/oxc_resolver/src/tests/scoped_packages.rs @@ -1,16 +1,10 @@ //! -use std::path::PathBuf; - use crate::{ResolveOptions, Resolver}; -fn fixture() -> PathBuf { - super::fixture().join("scoped") -} - #[test] fn scoped_packages() { - let f = fixture(); + let f = super::fixture().join("scoped"); let resolver = Resolver::new(ResolveOptions { alias_fields: vec!["browser".into()], diff --git a/crates/oxc_resolver/src/tests/simple.rs b/crates/oxc_resolver/src/tests/simple.rs index 4151de079..a679e7cde 100644 --- a/crates/oxc_resolver/src/tests/simple.rs +++ b/crates/oxc_resolver/src/tests/simple.rs @@ -7,20 +7,20 @@ use crate::Resolver; #[test] fn simple() { // mimic `enhanced-resolve/test/simple.test.js` - let f = env::current_dir().unwrap().join("tests/enhanced_resolve/test/"); + let dirname = env::current_dir().unwrap().join("tests"); + let f = dirname.join("enhanced_resolve/test"); let resolver = Resolver::default(); let data = [ ("direct", f.clone(), "../lib/index"), - ("as directory", f.clone(), ".."), - ("as module", f.join("../../").canonicalize().unwrap(), "./enhanced_resolve"), + ("as directory", f, ".."), + ("as module", dirname.clone(), "./enhanced_resolve"), ]; for (comment, path, request) in data { - let resolved_path = - resolver.resolve(&path, request).map(|f| f.full_path().canonicalize().unwrap()); - let expected = f.join("../lib/index.js").canonicalize().unwrap(); + let resolved_path = resolver.resolve(&path, request).map(|f| f.full_path()); + let expected = dirname.join("enhanced_resolve/lib/index.js"); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } }