@@ -233,3 +233,34 @@ fn all_alias_values_are_not_found() {
233233 let resolution = resolver. resolve ( & f, "m1/a.js" ) ;
234234 assert_eq ! ( resolution, Err ( ResolveError :: NotFound ( "m1/a.js" . to_string( ) ) ) ) ;
235235}
236+
237+ #[ test]
238+ fn alias_fragment ( ) {
239+ let f = super :: fixture ( ) ;
240+
241+ let data = [
242+ // enhanced-resolve has `#` prepended with a `\0`, they are removed from the
243+ // following 3 expected test results.
244+ // See https://github.com/webpack/enhanced-resolve#escaping
245+ (
246+ "handle fragment edge case (no fragment)" ,
247+ "./no#fragment/#/#" ,
248+ f. join ( "no#fragment/#/#.js" ) ,
249+ ) ,
250+ ( "handle fragment edge case (fragment)" , "./no#fragment/#/" , f. join ( "no.js#fragment/#/" ) ) ,
251+ (
252+ "handle fragment escaping" ,
253+ "./no\0 #fragment/\0 #/\0 ##fragment" ,
254+ f. join ( "no#fragment/#/#.js#fragment" ) ,
255+ ) ,
256+ ] ;
257+
258+ for ( comment, request, expected) in data {
259+ let resolver = Resolver :: new ( ResolveOptions {
260+ alias : vec ! [ ( "foo" . to_string( ) , vec![ AliasValue :: Path ( request. to_string( ) ) ] ) ] ,
261+ ..ResolveOptions :: default ( )
262+ } ) ;
263+ let resolved_path = resolver. resolve ( & f, "foo" ) . map ( |r| r. full_path ( ) ) ;
264+ assert_eq ! ( resolved_path, Ok ( expected) , "{comment} {request}" ) ;
265+ }
266+ }
0 commit comments