1#!perl
2use strict;
3use warnings all => 'FATAL';
4use FindBin '$Script';
5use Test::More;
6use Test::Trap;
7
8BEGIN {
9    use Module::Runtime qw(use_module);
10    eval { use_module("MooX::Locale::TextDomain::OO"); }
11        or plan skip_all => "This test needs MooX::Locale::TextDomain::OO";
12}
13
14{
15
16    package t;
17    use strict;
18    use warnings;
19    use Moo;
20    use MooX::Options with_locale_textdomain_oo => 1;
21
22    option req => (
23        is            => 'ro',
24        documentation => 'this is mandatory',
25        format        => 's',
26        required      => 1,
27    );
28
29    option neg => (
30        is            => 'ro',
31        negatable     => 1,
32        documentation => 'this is negatable',
33    );
34
35    option paths => (
36        is            => 'ro',
37        repeatable    => 1,
38        format        => 's',
39        documentation => 'list of some paths',
40    );
41
42    1;
43}
44
45{
46    use Locale::TextDomain::OO::Lexicon::Hash;
47
48    Locale::TextDomain::OO::Lexicon::Hash->new()->lexicon_ref(
49        {   'de:LC_MESSAGES:example' => [
50                {   msgid  => "",
51                    msgstr => "Language-Team: none\n"
52                        . "Language: de\n"
53                        . "MIME-Version: 1.0\n"
54                        . "Content-Type: text/plain; charset=ISO-8859-15\n"
55                        . "Content-Transfer-Encoding: 8bit\n"
56                        . "Plural-Forms: nplurals=2; plural=(n != 1);\n"
57                },
58                {   msgid  => "this is mandatory",
59                    msgstr => "dies ist erforderlich"
60                },
61                {   msgid  => "this is negatable",
62                    msgstr => "dieser ist negierbar"
63                },
64                {   msgid  => "show a short help message",
65                    msgstr => "Zeigt eine kurze Hilfe"
66                },
67                {   msgid  => "show a compact help message",
68                    msgstr => "Zeigt eine kompakte Hilfe"
69                },
70                {   msgid  => "show a long help message",
71                    msgstr => "Zeigt eine ausführliche Hilfe"
72                },
73                {   msgid  => "show the manual",
74                    msgstr => "Zeigt die Anleitung"
75                },
76                {   msgid  => "USAGE: %s %s",
77                    msgstr => "AUFRUF: %s %s"
78                },
79                {   msgid  => "String",
80                    msgstr => "Zeichenkette"
81                },
82                {   msgid  => "Int",
83                    msgstr => "Ganzzahl"
84                },
85                {   msgid  => "Ext. Int",
86                    msgstr => "erw. Ganzzahl"
87                },
88                {   msgid  => "Real",
89                    msgstr => "reelle Zahl"
90                },
91                {   msgid  => "[Strings]",
92                    msgstr => "[Zeichenketten]"
93                },
94                {   msgid  => "[Ints]",
95                    msgstr => "[Ganzzahlen]"
96                },
97                {   msgid  => "[Ext. Ints]",
98                    msgstr => "[erw. Ganzzahlen]"
99                },
100                {   msgid  => "[Reals]",
101                    msgstr => "[reelle Zahlen]"
102                },
103                {   msgid  => "Array of Strings",
104                    msgstr => "Menge von Zeichenketten"
105                },
106                {   msgid  => "Array of Integers",
107                    msgstr => "Menge von ganzen Zahlen"
108                },
109                {   msgid  => "Extended Integer",
110                    msgstr => "erweiterte ganze Zahl"
111                },
112                {   msgid  => "Array of extended integers",
113                    msgstr => "Menge von erweiterten ganzen Zahlen"
114                },
115                {   msgid  => "Real number",
116                    msgstr => "reelle Zahl"
117                },
118                {   msgid  => "Array of real numbers",
119                    msgstr => "Menge von reellen Zahlen"
120                },
121                {   msgid  => "SUB COMMANDS AVAILABLE: ",
122                    msgstr => "Verfügbare Unterkommandos: "
123                },
124                {   msgid  => "long options ...",
125                    msgstr => "ausgedehnte Parameter ..."
126                },
127            ]
128        }
129    );
130}
131
132{
133    local @ARGV = ('--help');
134    my $opt = trap { t->new_with_options(); };
135    like( $trap->stdout,
136        qr{USAGE:\s\Q$Script\E\s\[\-h\]\s\[long\soptions\s\.\.\.\]}x,
137        "Usage itself" );
138    like( $trap->stdout, qr{this\sis\snegatable}x, "--neg usage" );
139    like( $trap->stdout, qr{this\sis\smandatory}x, "--req usage" );
140    like( $trap->stdout, qr{show\sa\sshort\shelp\smessage}x,
141        "--usage usage" );
142    like( $trap->stdout, qr{show\sa\scompact\shelp\smessage}x, "-h usage" );
143    like( $trap->stdout, qr{show\sa\slong\shelp\smessage}x, "--help usage" );
144    like( $trap->stdout, qr{show\sthe\smanual}x,            "--man usage" );
145}
146
147Locale::TextDomain::OO->instance()->language("de");
148Locale::TextDomain::OO->instance()->category("LC_MESSAGES");
149Locale::TextDomain::OO->instance()->domain("example");
150
151{
152    local @ARGV = ('--help');
153    my $opt = trap { t->new_with_options(); };
154    like( $trap->stdout,
155        qr{AUFRUF:\s\Q$Script\E\s\[\-h\]\s\Q[ausgedehnte Parameter ...]\E}x,
156        "Usage itself" );
157    like( $trap->stdout, qr{dieser\sist\snegierbar}x,    "--neg aufruf" );
158    like( $trap->stdout, qr{dies\sist\serforderlich}x,   "--req aufruf" );
159    like( $trap->stdout, qr{Zeigt\seine\skurze\sHilfe}x, "--usage aufruf" );
160    like( $trap->stdout, qr{Zeigt\seine\skompakte\sHilfe}x, "-h aufruf" );
161    like(
162        $trap->stdout,
163        qr{Zeigt\seine\sausführliche\sHilfe}x,
164        "--help aufruf"
165    );
166    like( $trap->stdout, qr{Zeigt\sdie\sAnleitung}x, "--man aufruf" );
167}
168
169done_testing;
170