@@ -7,6 +7,7 @@ use fluent_locale::convert_vec_str_to_langids_lossy;
77use fluent_locale:: negotiate_languages;
88use fluent_locale:: parse_accepted_languages;
99use fluent_locale:: NegotiationStrategy ;
10+ use unic_langid:: langid;
1011use unic_langid:: LanguageIdentifier ;
1112use unic_locale:: locale;
1213
@@ -32,7 +33,9 @@ struct AcceptedLanguagesTestSet {
3233 output : Vec < String > ,
3334}
3435
35- fn read_negotiate_testsets < P : AsRef < Path > > ( path : P ) -> Result < Vec < NegotiateTestSet > , Box < dyn Error > > {
36+ fn read_negotiate_testsets < P : AsRef < Path > > (
37+ path : P ,
38+ ) -> Result < Vec < NegotiateTestSet > , Box < dyn Error > > {
3639 let file = File :: open ( path) ?;
3740 let sets = serde_json:: from_reader ( file) ?;
3841 Ok ( sets)
@@ -57,7 +60,7 @@ fn test_negotiate_fixtures(path: &str) {
5760 let requested = convert_vec_str_to_langids_lossy ( requested) ;
5861 let available = convert_vec_str_to_langids_lossy ( available) ;
5962 let output = convert_vec_str_to_langids_lossy ( test. output ) ;
60- let output2: Vec < & LanguageIdentifier > = output. iter ( ) . map ( |t| t . as_ref ( ) ) . collect ( ) ;
63+ let output2: Vec < & LanguageIdentifier > = output. iter ( ) . collect ( ) ;
6164 assert_eq ! (
6265 negotiate_languages( & requested, & available, None , strategy) ,
6366 output2,
@@ -69,7 +72,7 @@ fn test_negotiate_fixtures(path: &str) {
6972 let requested = convert_vec_str_to_langids_lossy ( requested) ;
7073 let available = convert_vec_str_to_langids_lossy ( available) ;
7174 let output = convert_vec_str_to_langids_lossy ( test. output ) ;
72- let output2: Vec < & LanguageIdentifier > = output. iter ( ) . map ( |t| t . as_ref ( ) ) . collect ( ) ;
75+ let output2: Vec < & LanguageIdentifier > = output. iter ( ) . collect ( ) ;
7376 assert_eq ! (
7477 negotiate_languages(
7578 & requested,
@@ -128,6 +131,29 @@ fn accepted_languages() {
128131 }
129132}
130133
134+ #[ test]
135+ fn langid_matching ( ) {
136+ let langid_en_us = langid ! ( "en-US" ) ;
137+ let langid_de_at = langid ! ( "de-AT" ) ;
138+ let langid_en = langid ! ( "en" ) ;
139+ let langid_de = langid ! ( "de" ) ;
140+ let langid_pl = langid ! ( "pl" ) ;
141+
142+ let requested = & [ & langid_en_us, & langid_de_at] ;
143+ let available = & [ & langid_pl, & langid_de, & langid_en] ;
144+ assert_eq ! (
145+ negotiate_languages( requested, available, None , NegotiationStrategy :: Matching ) ,
146+ & [ &&langid_en, &&langid_de] ,
147+ ) ;
148+
149+ let requested = & [ langid_en_us, langid_de_at] ;
150+ let available = & [ langid_pl, langid_de. clone ( ) , langid_en. clone ( ) ] ;
151+ assert_eq ! (
152+ negotiate_languages( requested, available, None , NegotiationStrategy :: Matching ) ,
153+ & [ & langid_en, & langid_de] ,
154+ ) ;
155+ }
156+
131157#[ test]
132158fn locale_matching ( ) {
133159 let loc_en_us = locale ! ( "en-US-u-hc-h12" ) ;
@@ -136,13 +162,23 @@ fn locale_matching() {
136162 let loc_de = locale ! ( "de" ) ;
137163 let loc_pl = locale ! ( "pl-x-private" ) ;
138164
165+ assert_eq ! (
166+ negotiate_languages(
167+ & [ & loc_en_us, & loc_de_at] ,
168+ & [ & loc_pl, & loc_de, & loc_en] ,
169+ None ,
170+ NegotiationStrategy :: Matching
171+ ) ,
172+ & [ &&loc_en, &&loc_de] ,
173+ ) ;
174+
139175 assert_eq ! (
140176 negotiate_languages(
141177 & [ loc_en_us, loc_de_at] ,
142178 & [ loc_pl, loc_de. clone( ) , loc_en. clone( ) ] ,
143179 None ,
144180 NegotiationStrategy :: Matching
145181 ) ,
146- vec! [ & loc_en, & loc_de] ,
182+ & [ & loc_en, & loc_de] ,
147183 ) ;
148184}
0 commit comments