1<?php 2 3/** 4 * webtrees: online genealogy 5 * Copyright (C) 2020 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 <http://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::ageString 35 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 36 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 37 * 38 * @return void 39 */ 40 public function testSameDayMonthYear(): void 41 { 42 $x = new Date('27 APR 2019'); 43 $y = new Date('27 APR 2019'); 44 $age = new Age($x, $y); 45 46 $this->assertSame(0, $age->ageDays()); 47 $this->assertSame(0, $age->ageYears()); 48 $this->assertSame('0', $age->ageYearsString()); 49 $this->assertSame('0 days', $age->ageString()); 50 $this->assertSame('(aged 0 days)', $age->ageAtEvent(false)); 51 $this->assertSame('(age 0 days)', $age->ageAtEvent(true)); 52 $this->assertSame('(on the date of death)', $age->timeAfterDeath()); 53 } 54 55 /** 56 * @covers \Fisharebest\Webtrees\Age::__construct 57 * @covers \Fisharebest\Webtrees\Age::ageDays 58 * @covers \Fisharebest\Webtrees\Age::ageYears 59 * @covers \Fisharebest\Webtrees\Age::ageYearsString 60 * @covers \Fisharebest\Webtrees\Age::ageString 61 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 62 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 63 * 64 * @return void 65 */ 66 public function testSameMonthYear(): void 67 { 68 $x = new Date('APR 2019'); 69 $y = new Date('APR 2019'); 70 $age = new Age($x, $y); 71 72 $this->assertSame(0, $age->ageDays()); 73 $this->assertSame(0, $age->ageYears()); 74 $this->assertSame('0', $age->ageYearsString()); 75 $this->assertSame('0', $age->ageString()); 76 $this->assertSame('(aged 0)', $age->ageAtEvent(false)); 77 $this->assertSame('(age 0)', $age->ageAtEvent(true)); 78 $this->assertSame('', $age->timeAfterDeath()); 79 } 80 81 /** 82 * @covers \Fisharebest\Webtrees\Age::__construct 83 * @covers \Fisharebest\Webtrees\Age::ageDays 84 * @covers \Fisharebest\Webtrees\Age::ageYears 85 * @covers \Fisharebest\Webtrees\Age::ageYearsString 86 * @covers \Fisharebest\Webtrees\Age::ageString 87 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 88 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 89 * 90 * @return void 91 */ 92 public function testSameYear(): void 93 { 94 $x = new Date('2019'); 95 $y = new Date('2019'); 96 $age = new Age($x, $y); 97 98 $this->assertSame(0, $age->ageDays()); 99 $this->assertSame(0, $age->ageYears()); 100 $this->assertSame('0', $age->ageYearsString()); 101 $this->assertSame('0', $age->ageString()); 102 $this->assertSame('(aged 0)', $age->ageAtEvent(false)); 103 $this->assertSame('(age 0)', $age->ageAtEvent(true)); 104 $this->assertSame('', $age->timeAfterDeath()); 105 } 106 107 /** 108 * @covers \Fisharebest\Webtrees\Age::__construct 109 * @covers \Fisharebest\Webtrees\Age::ageDays 110 * @covers \Fisharebest\Webtrees\Age::ageYears 111 * @covers \Fisharebest\Webtrees\Age::ageYearsString 112 * @covers \Fisharebest\Webtrees\Age::ageString 113 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 114 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 115 * 116 * @return void 117 */ 118 public function testReversed(): void 119 { 120 $x = new Date('13 FEB 2019'); 121 $y = new Date('07 JAN 2019'); 122 $age = new Age($x, $y); 123 124 $this->assertSame(-37, $age->ageDays()); 125 $this->assertSame(-1, $age->ageYears()); 126 $this->assertSame(view('icons/warning'), $age->ageYearsString()); 127 $this->assertSame(view('icons/warning'), $age->ageString()); 128 $this->assertSame('(aged ' . view('icons/warning') . ')', $age->ageAtEvent(false)); 129 $this->assertSame('(age ' . view('icons/warning') . ')', $age->ageAtEvent(true)); 130 $this->assertSame('(' . view('icons/warning') . ' after death)', $age->timeAfterDeath()); 131 } 132 133 /** 134 * @covers \Fisharebest\Webtrees\Age::__construct 135 * @covers \Fisharebest\Webtrees\Age::ageDays 136 * @covers \Fisharebest\Webtrees\Age::ageYears 137 * @covers \Fisharebest\Webtrees\Age::ageYearsString 138 * @covers \Fisharebest\Webtrees\Age::ageString 139 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 140 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 141 * 142 * @return void 143 */ 144 public function testStartDateInvalid(): void 145 { 146 $x = new Date(''); 147 $y = new Date('07 JAN 2019'); 148 $age = new Age($x, $y); 149 150 $this->assertSame(-1, $age->ageDays()); 151 $this->assertSame(-1, $age->ageYears()); 152 $this->assertSame('', $age->ageYearsString()); 153 $this->assertSame('', $age->ageString()); 154 $this->assertSame('', $age->ageAtEvent(false)); 155 $this->assertSame('', $age->ageAtEvent(true)); 156 $this->assertSame('', $age->timeAfterDeath()); 157 } 158 159 /** 160 * @covers \Fisharebest\Webtrees\Age::__construct 161 * @covers \Fisharebest\Webtrees\Age::ageDays 162 * @covers \Fisharebest\Webtrees\Age::ageYears 163 * @covers \Fisharebest\Webtrees\Age::ageYearsString 164 * @covers \Fisharebest\Webtrees\Age::ageString 165 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 166 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 167 * 168 * @return void 169 */ 170 public function testEndDateInvalid(): void 171 { 172 $x = new Date('07 JAN 2019'); 173 $y = new Date(''); 174 $age = new Age($x, $y); 175 176 $this->assertSame(-1, $age->ageDays()); 177 $this->assertSame(-1, $age->ageYears()); 178 $this->assertSame('', $age->ageYearsString()); 179 $this->assertSame('', $age->ageString()); 180 $this->assertSame('', $age->ageAtEvent(false)); 181 $this->assertSame('', $age->ageAtEvent(true)); 182 $this->assertSame('', $age->timeAfterDeath()); 183 } 184 185 /** 186 * @covers \Fisharebest\Webtrees\Age::__construct 187 * @covers \Fisharebest\Webtrees\Age::ageDays 188 * @covers \Fisharebest\Webtrees\Age::ageYears 189 * @covers \Fisharebest\Webtrees\Age::ageYearsString 190 * @covers \Fisharebest\Webtrees\Age::ageString 191 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 192 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 193 * 194 * @return void 195 */ 196 public function testOverlappingDates1(): void 197 { 198 $x = new Date('07 JAN 2019'); 199 $y = new Date('JAN 2019'); 200 $age = new Age($x, $y); 201 202 $this->assertSame(-6, $age->ageDays()); 203 $this->assertSame(0, $age->ageYears()); 204 $this->assertSame('0', $age->ageYearsString()); 205 $this->assertSame('0', $age->ageString()); 206 $this->assertSame('(aged 0)', $age->ageAtEvent(false)); 207 $this->assertSame('(age 0)', $age->ageAtEvent(true)); 208 $this->assertSame('', $age->timeAfterDeath()); 209 } 210 211 /** 212 * @covers \Fisharebest\Webtrees\Age::__construct 213 * @covers \Fisharebest\Webtrees\Age::ageDays 214 * @covers \Fisharebest\Webtrees\Age::ageYears 215 * @covers \Fisharebest\Webtrees\Age::ageYearsString 216 * @covers \Fisharebest\Webtrees\Age::ageString 217 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 218 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 219 * 220 * @return void 221 */ 222 public function testOverlappingDates2(): void 223 { 224 $x = new Date('JAN 2019'); 225 $y = new Date('07 JAN 2019'); 226 $age = new Age($x, $y); 227 228 $this->assertSame(6, $age->ageDays()); 229 $this->assertSame(0, $age->ageYears()); 230 $this->assertSame('0', $age->ageYearsString()); 231 $this->assertSame('0', $age->ageString()); 232 $this->assertSame('(aged 0)', $age->ageAtEvent(false)); 233 $this->assertSame('(age 0)', $age->ageAtEvent(true)); 234 $this->assertSame('', $age->timeAfterDeath()); 235 } 236 237 /** 238 * @covers \Fisharebest\Webtrees\Age::__construct 239 * @covers \Fisharebest\Webtrees\Age::ageDays 240 * @covers \Fisharebest\Webtrees\Age::ageYears 241 * @covers \Fisharebest\Webtrees\Age::ageYearsString 242 * @covers \Fisharebest\Webtrees\Age::ageString 243 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 244 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 245 * 246 * @return void 247 */ 248 public function testDifferentDay(): void 249 { 250 $x = new Date('13 APR 2019'); 251 $y = new Date('27 APR 2019'); 252 $age = new Age($x, $y); 253 254 $this->assertSame(14, $age->ageDays()); 255 $this->assertSame(0, $age->ageYears()); 256 $this->assertSame('0', $age->ageYearsString()); 257 $this->assertSame('14 days', $age->ageString()); 258 $this->assertSame('(aged 14 days)', $age->ageAtEvent(false)); 259 $this->assertSame('(age 14 days)', $age->ageAtEvent(true)); 260 $this->assertSame('(14 days after death)', $age->timeAfterDeath()); 261 } 262 263 /** 264 * @covers \Fisharebest\Webtrees\Age::__construct 265 * @covers \Fisharebest\Webtrees\Age::ageDays 266 * @covers \Fisharebest\Webtrees\Age::ageYears 267 * @covers \Fisharebest\Webtrees\Age::ageYearsString 268 * @covers \Fisharebest\Webtrees\Age::ageString 269 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 270 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 271 * 272 * @return void 273 */ 274 public function testDifferentMonth(): void 275 { 276 $x = new Date('13 APR 2019'); 277 $y = new Date('27 JUN 2019'); 278 $age = new Age($x, $y); 279 280 $this->assertSame(75, $age->ageDays()); 281 $this->assertSame(0, $age->ageYears()); 282 $this->assertSame('0', $age->ageYearsString()); 283 $this->assertSame('2 months', $age->ageString()); 284 $this->assertSame('(aged 2 months)', $age->ageAtEvent(false)); 285 $this->assertSame('(age 2 months)', $age->ageAtEvent(true)); 286 $this->assertSame('(2 months after death)', $age->timeAfterDeath()); 287 } 288 289 /** 290 * @covers \Fisharebest\Webtrees\Age::__construct 291 * @covers \Fisharebest\Webtrees\Age::ageDays 292 * @covers \Fisharebest\Webtrees\Age::ageYears 293 * @covers \Fisharebest\Webtrees\Age::ageYearsString 294 * @covers \Fisharebest\Webtrees\Age::ageString 295 * @covers \Fisharebest\Webtrees\Age::ageAtEvent 296 * @covers \Fisharebest\Webtrees\Age::timeAfterDeath 297 * 298 * @return void 299 */ 300 public function testDifferentYear(): void 301 { 302 $x = new Date('13 APR 2012'); 303 $y = new Date('27 JUN 2019'); 304 $age = new Age($x, $y); 305 306 $this->assertSame(2631, $age->ageDays()); 307 $this->assertSame(7, $age->ageYears()); 308 $this->assertSame('7', $age->ageYearsString()); 309 $this->assertSame('7 years', $age->ageString()); 310 $this->assertSame('(aged 7 years)', $age->ageAtEvent(false)); 311 $this->assertSame('(age 7 years)', $age->ageAtEvent(true)); 312 $this->assertSame('(7 years after death)', $age->timeAfterDeath()); 313 } 314} 315