aboutsummaryrefslogtreecommitdiffstats
path: root/t/i18n.t
diff options
context:
space:
mode:
authorEdmund von der Burg <evdb@mysociety.org>2011-06-10 12:48:33 +0100
committerEdmund von der Burg <evdb@mysociety.org>2011-06-10 12:48:33 +0100
commitb02e8e5e29aa1b7087b08d6d7eddccae516b171a (patch)
tree807c3f65cf9983e69f930134b910d08da2587887 /t/i18n.t
parent1c7903469e52e0511e2a8b8c6b5ca7e39421d19e (diff)
Sort correctly for all locales
Diffstat (limited to 't/i18n.t')
-rw-r--r--t/i18n.t70
1 files changed, 70 insertions, 0 deletions
diff --git a/t/i18n.t b/t/i18n.t
index 6a5d94fa2..a5b68782b 100644
--- a/t/i18n.t
+++ b/t/i18n.t
@@ -5,6 +5,12 @@ use Test::More;
use FixMyStreet;
use mySociety::Locale;
+use Encode;
+use Data::Dumper;
+use Sort::Key qw(keysort);
+use POSIX 'strcoll';
+local $Data::Dumper::Sortkeys = 1;
+use utf8;
# check that the mo files have been generated
die "You need to run 'commonlib/bin/gettext-makemo --quiet FixMyStreet' "
@@ -36,4 +42,68 @@ mySociety::Locale::gettext_domain( 'FixMyStreet-EmptyHomes', 1,
mySociety::Locale::change('cy');
is _($english), $welsh, "english to welsh (deep directory)";
+# test that sorting works as expected in the right circumstances...
+my @random_sorted = qw( Å Z Ø A );
+my @EN_sorted = qw( A Å Ø Z );
+my @NO_sorted = qw( A Z Ø Å );
+my @default_sorted = qw( A Z Å Ø );
+
+sub utf8_diag {
+ diag encode_utf8( Dumper(@_) );
+}
+
+{
+
+ mySociety::Locale::negotiate_language( #
+ 'en-gb,English,en_GB|cy,Cymraeg,cy_GB', 'en_GB'
+ );
+ mySociety::Locale::change();
+
+ no locale;
+
+ is_deeply( [ sort @random_sorted ],
+ \@default_sorted, "sort correctly with no locale" );
+
+ is_deeply( [ keysort { $_ } @random_sorted ],
+ \@default_sorted, "keysort correctly with no locale" );
+
+ # Note - this obeys the locale
+ is_deeply( [ sort { strcoll( $a, $b ) } @random_sorted ],
+ \@EN_sorted, "sort strcoll correctly with no locale (to 'en_GB')" );
+}
+
+{
+ mySociety::Locale::negotiate_language( #
+ 'en-gb,English,en_GB|cy,Cymraeg,cy_GB', 'en_GB'
+ );
+ mySociety::Locale::change();
+ use locale;
+
+ is_deeply( [ sort @random_sorted ],
+ \@EN_sorted, "sort correctly with use locale 'en_GB'" );
+
+ # is_deeply( [ keysort { $_ } @random_sorted ],
+ # \@EN_sorted, "keysort correctly with use locale 'en_GB'" );
+
+ is_deeply( [ sort { strcoll( $a, $b ) } @random_sorted ],
+ \@EN_sorted, "sort strcoll correctly with use locale 'en_GB'" );
+}
+
+{
+ mySociety::Locale::negotiate_language( #
+ 'nb-no,Norwegian,nb_NO', 'nb_NO'
+ );
+ mySociety::Locale::change();
+ use locale;
+
+ is_deeply( [ sort @random_sorted ],
+ \@NO_sorted, "sort correctly with use locale 'nb_NO'" );
+
+ # is_deeply( [ keysort { $_ } @random_sorted ],
+ # \@NO_sorted, "keysort correctly with use locale 'nb_NO'" );
+
+ is_deeply( [ sort { strcoll( $a, $b ) } @random_sorted ],
+ \@NO_sorted, "sort strcoll correctly with use locale 'nb_NO'" );
+}
+
done_testing();