1616use CodeIgniter \HTTP \Exceptions \HTTPException ;
1717use CodeIgniter \Test \CIUnitTestCase ;
1818use Config \App ;
19+ use Config \Feature ;
1920use PHPUnit \Framework \Attributes \Group ;
2021
2122/**
@@ -111,11 +112,23 @@ public function testNegotiatesEncodingBasics(): void
111112
112113 public function testAcceptLanguageBasics (): void
113114 {
114- $ this ->request ->setHeader ('Accept-Language ' , 'da, en-gb;q=0.8, en;q=0.7 ' );
115+ $ this ->request ->setHeader ('Accept-Language ' , 'da, en-gb, en-us ;q=0.8, en;q=0.7 ' );
115116
116117 $ this ->assertSame ('da ' , $ this ->negotiate ->language (['da ' , 'en ' ]));
117118 $ this ->assertSame ('en-gb ' , $ this ->negotiate ->language (['en-gb ' , 'en ' ]));
118119 $ this ->assertSame ('en ' , $ this ->negotiate ->language (['en ' ]));
120+
121+ // Will find the first locale instead of "en-gb"
122+ $ this ->assertSame ('en-us ' , $ this ->negotiate ->language (['en-us ' , 'en-gb ' , 'en ' ]));
123+ $ this ->assertSame ('en ' , $ this ->negotiate ->language (['en ' , 'en-us ' , 'en-gb ' ]));
124+
125+ config (Feature::class)->simpleNegotiateLocale = false ;
126+
127+ $ this ->assertSame ('da ' , $ this ->negotiate ->language (['da ' , 'en ' ]));
128+ $ this ->assertSame ('en-gb ' , $ this ->negotiate ->language (['en-gb ' , 'en ' ]));
129+ $ this ->assertSame ('en ' , $ this ->negotiate ->language (['en ' ]));
130+ $ this ->assertSame ('en-gb ' , $ this ->negotiate ->language (['en-us ' , 'en-gb ' , 'en ' ]));
131+ $ this ->assertSame ('en-gb ' , $ this ->negotiate ->language (['en ' , 'en-us ' , 'en-gb ' ]));
119132 }
120133
121134 /**
@@ -125,7 +138,17 @@ public function testAcceptLanguageMatchesBroadly(): void
125138 {
126139 $ this ->request ->setHeader ('Accept-Language ' , 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7 ' );
127140
128- $ this ->assertSame ('fr ' , $ this ->negotiate ->language (['fr ' , 'en ' ]));
141+ $ this ->assertSame ('fr ' , $ this ->negotiate ->language (['fr ' , 'fr-FR ' , 'en ' ]));
142+ $ this ->assertSame ('fr-FR ' , $ this ->negotiate ->language (['fr-FR ' , 'fr ' , 'en ' ]));
143+ $ this ->assertSame ('fr-BE ' , $ this ->negotiate ->language (['fr-BE ' , 'fr ' , 'en ' ]));
144+ $ this ->assertSame ('en ' , $ this ->negotiate ->language (['en ' , 'en-US ' ]));
145+
146+ config (Feature::class)->simpleNegotiateLocale = false ;
147+
148+ $ this ->assertSame ('fr-FR ' , $ this ->negotiate ->language (['fr ' , 'fr-FR ' , 'en ' ]));
149+ $ this ->assertSame ('fr-FR ' , $ this ->negotiate ->language (['fr-FR ' , 'fr ' , 'en ' ]));
150+ $ this ->assertSame ('fr ' , $ this ->negotiate ->language (['fr-BE ' , 'fr ' , 'en ' ]));
151+ $ this ->assertSame ('en-US ' , $ this ->negotiate ->language (['en ' , 'en-US ' ]));
129152 }
130153
131154 public function testBestMatchEmpty (): void
0 commit comments