diff options
author | Edmund von der Burg <evdb@mysociety.org> | 2011-06-10 12:48:33 +0100 |
---|---|---|
committer | Edmund von der Burg <evdb@mysociety.org> | 2011-06-10 12:48:33 +0100 |
commit | b02e8e5e29aa1b7087b08d6d7eddccae516b171a (patch) | |
tree | 807c3f65cf9983e69f930134b910d08da2587887 /t/i18n.t | |
parent | 1c7903469e52e0511e2a8b8c6b5ca7e39421d19e (diff) |
Sort correctly for all locales
Diffstat (limited to 't/i18n.t')
-rw-r--r-- | t/i18n.t | 70 |
1 files changed, 70 insertions, 0 deletions
@@ -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(); |