]> git.openstreetmap.org Git - nominatim.git/blob - test/php/Nominatim/ParameterParserTest.php
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / test / php / Nominatim / ParameterParserTest.php
1 <?php
2 /**
3  * SPDX-License-Identifier: GPL-2.0-only
4  *
5  * This file is part of Nominatim. (https://nominatim.org)
6  *
7  * Copyright (C) 2022 by the Nominatim developer community.
8  * For a full list of authors see the git log.
9  */
10
11 namespace Nominatim;
12
13 require_once(CONST_LibDir.'/ParameterParser.php');
14
15
16 function userError($sError)
17 {
18     throw new \Exception($sError);
19 }
20
21 class ParameterParserTest extends \PHPUnit\Framework\TestCase
22 {
23
24
25     public function testGetBool()
26     {
27         $oParams = new ParameterParser(array(
28                                         'bool1' => '1',
29                                         'bool2' => '0',
30                                         'bool3' => 'true',
31                                         'bool4' => 'false',
32                                         'bool5' => ''
33                                        ));
34
35         $this->assertSame(false, $oParams->getBool('non-exists'));
36         $this->assertSame(true, $oParams->getBool('non-exists', true));
37         $this->assertSame(true, $oParams->getBool('bool1'));
38         $this->assertSame(false, $oParams->getBool('bool2'));
39         $this->assertSame(true, $oParams->getBool('bool3'));
40         $this->assertSame(true, $oParams->getBool('bool4'));
41         $this->assertSame(false, $oParams->getBool('bool5'));
42     }
43
44
45     public function testGetInt()
46     {
47         $oParams = new ParameterParser(array(
48                                         'int1' => '5',
49                                         'int2' => '-1',
50                                         'int3' => 0
51                                        ));
52
53         $this->assertSame(false, $oParams->getInt('non-exists'));
54         $this->assertSame(999, $oParams->getInt('non-exists', 999));
55         $this->assertSame(5, $oParams->getInt('int1'));
56
57         $this->assertSame(-1, $oParams->getInt('int2'));
58         $this->assertSame(0, $oParams->getInt('int3'));
59     }
60
61
62     public function testGetIntWithNonNumber()
63     {
64         $this->expectException(\Exception::class);
65         $this->expectExceptionMessage("Integer number expected for parameter 'int4'");
66
67         (new ParameterParser(array('int4' => 'a')))->getInt('int4');
68     }
69
70
71     public function testGetIntWithEmpytString()
72     {
73         $this->expectException(\Exception::class);
74         $this->expectExceptionMessage("Integer number expected for parameter 'int5'");
75
76         (new ParameterParser(array('int5' => '')))->getInt('int5');
77     }
78
79
80     public function testGetFloat()
81     {
82
83         $oParams = new ParameterParser(array(
84                                         'float1' => '1.0',
85                                         'float2' => '-5',
86                                         'float3' => 0
87                                        ));
88
89         $this->assertSame(false, $oParams->getFloat('non-exists'));
90         $this->assertSame(999, $oParams->getFloat('non-exists', 999));
91         $this->assertSame(1.0, $oParams->getFloat('float1'));
92         $this->assertSame(-5.0, $oParams->getFloat('float2'));
93         $this->assertSame(0.0, $oParams->getFloat('float3'));
94     }
95
96     public function testGetFloatWithEmptyString()
97     {
98         $this->expectException(\Exception::class);
99         $this->expectExceptionMessage("Floating-point number expected for parameter 'float4'");
100
101         (new ParameterParser(array('float4' => '')))->getFloat('float4');
102     }
103
104     public function testGetFloatWithTextString()
105     {
106         $this->expectException(\Exception::class);
107         $this->expectExceptionMessage("Floating-point number expected for parameter 'float5'");
108
109         (new ParameterParser(array('float5' => 'a')))->getFloat('float5');
110     }
111
112
113     public function testGetFloatWithInvalidNumber()
114     {
115         $this->expectException(\Exception::class);
116         $this->expectExceptionMessage("Floating-point number expected for parameter 'float6'");
117
118         (new ParameterParser(array('float6' => '-55.')))->getFloat('float6');
119     }
120
121
122     public function testGetString()
123     {
124         $oParams = new ParameterParser(array(
125                                         'str1' => 'abc',
126                                         'str2' => '',
127                                         'str3' => '0'
128                                        ));
129
130         $this->assertSame(false, $oParams->getString('non-exists'));
131         $this->assertSame('default', $oParams->getString('non-exists', 'default'));
132         $this->assertSame('abc', $oParams->getString('str1'));
133         $this->assertSame(false, $oParams->getStringList('str2'));
134         $this->assertSame(false, $oParams->getStringList('str3')); // sadly PHP magic treats 0 as false when returned
135     }
136
137
138     public function testGetSet()
139     {
140         $oParams = new ParameterParser(array(
141                                         'val1' => 'foo',
142                                         'val2' => '',
143                                         'val3' => 0
144                                        ));
145
146         $this->assertSame(false, $oParams->getSet('non-exists', array('foo', 'bar')));
147         $this->assertSame('default', $oParams->getSet('non-exists', array('foo', 'bar'), 'default'));
148         $this->assertSame('foo', $oParams->getSet('val1', array('foo', 'bar')));
149
150         $this->assertSame(false, $oParams->getSet('val2', array('foo', 'bar')));
151         $this->assertSame(0, $oParams->getSet('val3', array('foo', 'bar')));
152     }
153
154
155     public function testGetSetWithValueNotInSet()
156     {
157         $this->expectException(\Exception::class);
158         $this->expectExceptionMessage("Parameter 'val4' must be one of: foo, bar");
159
160         (new ParameterParser(array('val4' => 'faz')))->getSet('val4', array('foo', 'bar'));
161     }
162
163
164     public function testGetStringList()
165     {
166         $oParams = new ParameterParser(array(
167                                         'list1' => ',a,b,c,,c,d',
168                                         'list2' => 'a',
169                                         'list3' => '',
170                                         'list4' => '0'
171                                        ));
172
173         $this->assertSame(false, $oParams->getStringList('non-exists'));
174         $this->assertSame(array('a', 'b'), $oParams->getStringList('non-exists', array('a', 'b')));
175         $this->assertSame(array('a', 'b', 'c', 'c', 'd'), $oParams->getStringList('list1'));
176         $this->assertSame(array('a'), $oParams->getStringList('list2'));
177         $this->assertSame(false, $oParams->getStringList('list3'));
178         $this->assertSame(false, $oParams->getStringList('list4'));
179     }
180
181
182     public function testGetPreferredLanguages()
183     {
184         $oParams = new ParameterParser(array('accept-language' => ''));
185         $this->assertSame(array(
186                            'name:default' => 'name:default',
187                            '_place_name:default' => '_place_name:default',
188                            'name' => 'name',
189                            '_place_name' => '_place_name'
190                           ), array_slice($oParams->getPreferredLanguages('default'), 0, 4));
191
192         $oParams = new ParameterParser(array('accept-language' => 'de,en'));
193         $this->assertSame(array(
194                            'name:de' => 'name:de',
195                            '_place_name:de' => '_place_name:de',
196                            'name:en' => 'name:en',
197                            '_place_name:en' => '_place_name:en',
198                            'name' => 'name',
199                            '_place_name' => '_place_name'
200                           ), array_slice($oParams->getPreferredLanguages('default'), 0, 6));
201
202         $oParams = new ParameterParser(array('accept-language' => 'fr-ca,fr;q=0.8,en-ca;q=0.5,en;q=0.3'));
203         $this->assertSame(array(
204                            'name:fr-ca' => 'name:fr-ca',
205                            '_place_name:fr-ca' => '_place_name:fr-ca',
206                            'name:fr' => 'name:fr',
207                            '_place_name:fr' => '_place_name:fr',
208                            'name:en-ca' => 'name:en-ca',
209                            '_place_name:en-ca' => '_place_name:en-ca',
210                            'name:en' => 'name:en',
211                            '_place_name:en' => '_place_name:en',
212                            'name' => 'name',
213                            '_place_name' => '_place_name'
214                           ), array_slice($oParams->getPreferredLanguages('default'), 0, 10));
215
216         $oParams = new ParameterParser(array('accept-language' => 'ja_rm,zh_pinyin'));
217         $this->assertSame(array(
218                            'name:ja_rm' => 'name:ja_rm',
219                            '_place_name:ja_rm' => '_place_name:ja_rm',
220                            'name:zh_pinyin' => 'name:zh_pinyin',
221                            '_place_name:zh_pinyin' => '_place_name:zh_pinyin',
222                            'name:ja' => 'name:ja',
223                            '_place_name:ja' => '_place_name:ja',
224                            'name:zh' => 'name:zh',
225                            '_place_name:zh' => '_place_name:zh',
226                            'name' => 'name',
227                            '_place_name' => '_place_name'
228                           ), array_slice($oParams->getPreferredLanguages('default'), 0, 10));
229     }
230
231     public function testHasSetAny()
232     {
233         $oParams = new ParameterParser(array(
234                                         'one' => '',
235                                         'two' => 0,
236                                         'three' => '0',
237                                         'four' => '1',
238                                         'five' => 'anystring'
239         ));
240         $this->assertFalse($oParams->hasSetAny(array()));
241         $this->assertFalse($oParams->hasSetAny(array('')));
242         $this->assertFalse($oParams->hasSetAny(array('unknown')));
243         $this->assertFalse($oParams->hasSetAny(array('one', 'two', 'three')));
244         $this->assertTrue($oParams->hasSetAny(array('one', 'four')));
245         $this->assertTrue($oParams->hasSetAny(array('four')));
246         $this->assertTrue($oParams->hasSetAny(array('five')));
247     }
248 }