xref: /webtrees/tests/app/AgeTest.php (revision a26ec5ede3c2ecdb45b783755ede967935aaecba)
1<?php
2
3/**
4 * webtrees: online genealogy
5 * Copyright (C) 2023 webtrees development team
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
18declare(strict_types=1);
19
20namespace Fisharebest\Webtrees;
21
22use function view;
23
24/**
25 * Test the Age functions
26 */
27class AgeTest extends TestCase
28{
29    /**
30     * @covers \Fisharebest\Webtrees\Age::__construct
31     * @covers \Fisharebest\Webtrees\Age::ageDays
32     * @covers \Fisharebest\Webtrees\Age::ageYears
33     * @covers \Fisharebest\Webtrees\Age::ageYearsString
34     * @covers \Fisharebest\Webtrees\Age::__toString
35     */
36    public function testSameDayMonthYear(): void
37    {
38        $x = new Date('27 APR 2019');
39        $y = new Date('27 APR 2019');
40        $age = new Age($x, $y);
41
42        self::assertSame(0, $age->ageDays());
43        self::assertSame(0, $age->ageYears());
44        self::assertSame('0', $age->ageYearsString());
45        self::assertSame('0 days', (string) $age);
46    }
47
48    /**
49     * @covers \Fisharebest\Webtrees\Age::__construct
50     * @covers \Fisharebest\Webtrees\Age::ageDays
51     * @covers \Fisharebest\Webtrees\Age::ageYears
52     * @covers \Fisharebest\Webtrees\Age::ageYearsString
53     * @covers \Fisharebest\Webtrees\Age::__toString
54     */
55    public function testSameMonthYear(): void
56    {
57        $x = new Date('APR 2019');
58        $y = new Date('APR 2019');
59        $age = new Age($x, $y);
60
61        self::assertSame(0, $age->ageDays());
62        self::assertSame(0, $age->ageYears());
63        self::assertSame('0', $age->ageYearsString());
64        self::assertSame('0', (string) $age);
65    }
66
67    /**
68     * @covers \Fisharebest\Webtrees\Age::__construct
69     * @covers \Fisharebest\Webtrees\Age::ageDays
70     * @covers \Fisharebest\Webtrees\Age::ageYears
71     * @covers \Fisharebest\Webtrees\Age::ageYearsString
72     * @covers \Fisharebest\Webtrees\Age::__toString
73     */
74    public function testSameYear(): void
75    {
76        $x = new Date('2019');
77        $y = new Date('2019');
78        $age = new Age($x, $y);
79
80        self::assertSame(0, $age->ageDays());
81        self::assertSame(0, $age->ageYears());
82        self::assertSame('0', $age->ageYearsString());
83        self::assertSame('0', (string) $age);
84    }
85
86    /**
87     * @covers \Fisharebest\Webtrees\Age::__construct
88     * @covers \Fisharebest\Webtrees\Age::ageDays
89     * @covers \Fisharebest\Webtrees\Age::ageYears
90     * @covers \Fisharebest\Webtrees\Age::ageYearsString
91     * @covers \Fisharebest\Webtrees\Age::__toString
92     */
93    public function testReversed(): void
94    {
95        $x = new Date('13 FEB 2019');
96        $y = new Date('07 JAN 2019');
97        $age = new Age($x, $y);
98
99        self::assertSame(-37, $age->ageDays());
100        self::assertSame(-1, $age->ageYears());
101        self::assertSame(view('icons/warning'), $age->ageYearsString());
102        self::assertSame(view('icons/warning'), (string) $age);
103    }
104
105    /**
106     * @covers \Fisharebest\Webtrees\Age::__construct
107     * @covers \Fisharebest\Webtrees\Age::ageDays
108     * @covers \Fisharebest\Webtrees\Age::ageYears
109     * @covers \Fisharebest\Webtrees\Age::ageYearsString
110     * @covers \Fisharebest\Webtrees\Age::__toString
111     */
112    public function testStartDateInvalid(): void
113    {
114        $x = new Date('');
115        $y = new Date('07 JAN 2019');
116        $age = new Age($x, $y);
117
118        self::assertSame(-1, $age->ageDays());
119        self::assertSame(-1, $age->ageYears());
120        self::assertSame('', $age->ageYearsString());
121        self::assertSame('', (string) $age);
122    }
123
124    /**
125     * @covers \Fisharebest\Webtrees\Age::__construct
126     * @covers \Fisharebest\Webtrees\Age::ageDays
127     * @covers \Fisharebest\Webtrees\Age::ageYears
128     * @covers \Fisharebest\Webtrees\Age::ageYearsString
129     * @covers \Fisharebest\Webtrees\Age::__toString
130     */
131    public function testEndDateInvalid(): void
132    {
133        $x = new Date('07 JAN 2019');
134        $y = new Date('');
135        $age = new Age($x, $y);
136
137        self::assertSame(-1, $age->ageDays());
138        self::assertSame(-1, $age->ageYears());
139        self::assertSame('', $age->ageYearsString());
140        self::assertSame('', (string) $age);
141    }
142
143    /**
144     * @covers \Fisharebest\Webtrees\Age::__construct
145     * @covers \Fisharebest\Webtrees\Age::ageDays
146     * @covers \Fisharebest\Webtrees\Age::ageYears
147     * @covers \Fisharebest\Webtrees\Age::ageYearsString
148     * @covers \Fisharebest\Webtrees\Age::__toString
149     */
150    public function testOverlappingDates1(): void
151    {
152        $x = new Date('07 JAN 2019');
153        $y = new Date('JAN 2019');
154        $age = new Age($x, $y);
155
156        self::assertSame(-6, $age->ageDays());
157        self::assertSame(0, $age->ageYears());
158        self::assertSame('0', $age->ageYearsString());
159        self::assertSame('0', (string) $age);
160    }
161
162    /**
163     * @covers \Fisharebest\Webtrees\Age::__construct
164     * @covers \Fisharebest\Webtrees\Age::ageDays
165     * @covers \Fisharebest\Webtrees\Age::ageYears
166     * @covers \Fisharebest\Webtrees\Age::ageYearsString
167     * @covers \Fisharebest\Webtrees\Age::__toString
168     */
169    public function testOverlappingDates2(): void
170    {
171        $x = new Date('JAN 2019');
172        $y = new Date('07 JAN 2019');
173        $age = new Age($x, $y);
174
175        self::assertSame(6, $age->ageDays());
176        self::assertSame(0, $age->ageYears());
177        self::assertSame('0', $age->ageYearsString());
178        self::assertSame('0', (string) $age);
179    }
180
181    /**
182     * @covers \Fisharebest\Webtrees\Age::__construct
183     * @covers \Fisharebest\Webtrees\Age::ageDays
184     * @covers \Fisharebest\Webtrees\Age::ageYears
185     * @covers \Fisharebest\Webtrees\Age::ageYearsString
186     * @covers \Fisharebest\Webtrees\Age::__toString
187     */
188    public function testDifferentDay(): void
189    {
190        $x = new Date('13 APR 2019');
191        $y = new Date('27 APR 2019');
192        $age = new Age($x, $y);
193
194        self::assertSame(14, $age->ageDays());
195        self::assertSame(0, $age->ageYears());
196        self::assertSame('0', $age->ageYearsString());
197        self::assertSame('14 days', (string) $age);
198    }
199
200    /**
201     * @covers \Fisharebest\Webtrees\Age::__construct
202     * @covers \Fisharebest\Webtrees\Age::ageDays
203     * @covers \Fisharebest\Webtrees\Age::ageYears
204     * @covers \Fisharebest\Webtrees\Age::ageYearsString
205     * @covers \Fisharebest\Webtrees\Age::__toString
206     */
207    public function testDifferentMonth(): void
208    {
209        $x = new Date('13 APR 2019');
210        $y = new Date('27 JUN 2019');
211        $age = new Age($x, $y);
212
213        self::assertSame(75, $age->ageDays());
214        self::assertSame(0, $age->ageYears());
215        self::assertSame('0', $age->ageYearsString());
216        self::assertSame('2 months', (string) $age);
217    }
218
219    /**
220     * @covers \Fisharebest\Webtrees\Age::__construct
221     * @covers \Fisharebest\Webtrees\Age::ageDays
222     * @covers \Fisharebest\Webtrees\Age::ageYears
223     * @covers \Fisharebest\Webtrees\Age::ageYearsString
224     * @covers \Fisharebest\Webtrees\Age::__toString
225     */
226    public function testDifferentYear(): void
227    {
228        $x = new Date('13 APR 2012');
229        $y = new Date('27 JUN 2019');
230        $age = new Age($x, $y);
231
232        self::assertSame(2631, $age->ageDays());
233        self::assertSame(7, $age->ageYears());
234        self::assertSame('7', $age->ageYearsString());
235        self::assertSame('7 years', (string) $age);
236    }
237}
238