death-notifier/src/test/php/com/fwdekker/deathnotifier/wikipedia/RedirectsTest.php

169 lines
4.8 KiB
PHP

<?php
namespace com\fwdekker\deathnotifier\wikipedia;
use PHPUnit\Framework\TestCase;
/**
* Unit tests for {@see Redirects}.
*/
class RedirectsTest extends TestCase
{
public function test_resolve_returns_key_if_empty(): void
{
$redirects = new Redirects();
self::assertEquals("does-not-exist", $redirects->resolve("does-not-exist"));
}
public function test_resolve_returns_key_if_key_not_added(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["from" => "to"]);
self::assertEquals("does-not-exist", $redirects->resolve("does-not-exist"));
}
public function test_resolve_returns_target_if_key_added(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["from" => "to"]);
self::assertEquals("to", $redirects->resolve("from"));
}
public function test_resolve_returns_new_target_if_key_overridden(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["from" => "to"]);
$redirects = $redirects->add(["from" => "new"]);
self::assertEquals("new", $redirects->resolve("from"));
}
public function test_add_does_not_alter_old_object(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["from" => "to"]);
$new_redirects = $redirects->add(["from" => "new"]);
self::assertEquals("to", $redirects->resolve("from"));
self::assertEquals("new", $new_redirects->resolve("from"));
}
public function test_add_inserts_new_key(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["from" => "to"]);
self::assertEquals("to", $redirects->resolve("from"));
}
public function test_add_inserts_multiple_new_keys(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["a" => "one", "b" => "two", "c" => "three"]);
self::assertEquals("one", $redirects->resolve("a"));
self::assertEquals("two", $redirects->resolve("b"));
self::assertEquals("three", $redirects->resolve("c"));
}
public function test_merges_ab_and_bc_to_ac(): void
{
$redirects = new Redirects();
$redirects = $redirects->add([
"a" => "b",
"b" => "c",
]);
self::assertEquals("c", $redirects->resolve("a"));
self::assertEquals("c", $redirects->resolve("b"));
self::assertEquals("c", $redirects->resolve("c"));
}
public function test_merges_bc_and_ab_to_ac(): void
{
$redirects = new Redirects();
$redirects = $redirects->add([
"b" => "c",
"a" => "b",
]);
self::assertEquals("c", $redirects->resolve("a"));
self::assertEquals("c", $redirects->resolve("b"));
self::assertEquals("c", $redirects->resolve("c"));
}
public function test_merges_ab_cd_and_bc_to_ad(): void
{
$redirects = new Redirects();
$redirects = $redirects->add([
"a" => "b",
"c" => "d",
"b" => "c",
]);
self::assertEquals("d", $redirects->resolve("a"));
self::assertEquals("d", $redirects->resolve("b"));
self::assertEquals("d", $redirects->resolve("c"));
self::assertEquals("d", $redirects->resolve("d"));
}
public function test_has_non_reflexive_redirects_is_false_if_empty(): void
{
$redirects = new Redirects();
self::assertFalse($redirects->has_non_reflexive_redirects());
}
public function test_has_non_reflexive_redirects_is_false_if_all_are_reflexive(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["a" => "a", "b" => "b", "c" => "c"]);
self::assertFalse($redirects->has_non_reflexive_redirects());
}
public function test_has_non_reflexive_redirects_is_true_if_all_are_non_reflexive(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["a" => "one", "b" => "two", "c" => "three"]);
self::assertTrue($redirects->has_non_reflexive_redirects());
}
public function test_has_non_reflexive_redirects_is_true_if_some_are_non_reflexive(): void
{
$redirects = new Redirects();
$redirects = $redirects->add(["a" => "one", "self" => "self", "c" => "three"]);
self::assertTrue($redirects->has_non_reflexive_redirects());
}
public function test_iterator_iterates_over_all_redirects(): void
{
$inserted = ["a" => "one", "b" => "two", "c" => "three"];
$redirects = new Redirects();
$redirects = $redirects->add($inserted);
$extracted = [];
foreach ($redirects as $from => $to)
$extracted[$from] = $to;
self::assertSame($extracted, $inserted);
}
}