Compare commits

..

3 Commits

Author SHA1 Message Date
3532386aef
Added tests 2023-01-14 15:37:01 +01:00
2d7788dcc0
Added test tournament 2023-01-14 15:36:45 +01:00
510e5baac3
BUGFIX: Namespace changes 2023-01-14 15:36:03 +01:00
12 changed files with 1903 additions and 123 deletions

9
.gitignore vendored
View File

@ -1,2 +1,9 @@
/vendor/ # Jetbrains
.idea/ .idea/
# Composer
/vendor/
# PHPUnit
/.phpunit.cache
.phpunit.result.cache

View File

@ -22,6 +22,7 @@
"blackbirdchess/blackbirdchess-service-results": "dev-main" "blackbirdchess/blackbirdchess-service-results": "dev-main"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^9"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -30,8 +31,12 @@
}, },
"config": { "config": {
"platform": { "platform": {
"php": "7.1" "php": "8.1"
}, },
"sort-packages": true "sort-packages": true
} },
"repositories": [{
"type": "composer",
"url": "https://repo.blackbirdchess.app"
}]
} }

1796
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
res/Pairtwo5-testfile.sws Normal file

Binary file not shown.

BIN
res/Pairtwo6-testfile.sws Normal file

Binary file not shown.

BIN
res/Swar5-testfile.swar Normal file

Binary file not shown.

View File

@ -1,16 +1,5 @@
<?php <?php
/**
* Reader Pairtwo6
*
* Reads out Pairtwo-6 and Pairtwo-5 files
*
* @author Jeroen De Meerleer <schaak@jeroened.be>
* @category Main
* @package Libpairtwo
* @copyright Copyright (c) 2018-2019 Jeroen De Meerleer <schaak@jeroened.be>
*/
namespace Blackbirdchess\Service\Import\Readers; namespace Blackbirdchess\Service\Import\Readers;
use DateTime; use DateTime;
@ -21,8 +10,8 @@ use Blackbirdchess\Service\Results\Enums\Result;
use Blackbirdchess\Service\Results\Enums\Tiebreak; use Blackbirdchess\Service\Results\Enums\Tiebreak;
use Blackbirdchess\Service\Results\Enums\Title; use Blackbirdchess\Service\Results\Enums\Title;
use Blackbirdchess\Service\Results\Enums\TournamentSystem; use Blackbirdchess\Service\Results\Enums\TournamentSystem;
use Blackbirdchess\Service\Results\Exceptions\IncompatibleReaderException; use Blackbirdchess\Service\Import\Exceptions\IncompatibleReaderException;
use Blackbirdchess\Service\Results\Interfaces\ReaderInterface; use Blackbirdchess\Service\Import\Interfaces\ReaderInterface;
use Blackbirdchess\Service\Results\Pairing; use Blackbirdchess\Service\Results\Pairing;
use Blackbirdchess\Service\Results\Player; use Blackbirdchess\Service\Results\Player;
use Blackbirdchess\Service\Results\Round; use Blackbirdchess\Service\Results\Round;

View File

@ -43,7 +43,7 @@ class Swar5 implements ReaderInterface
/** /**
* @var array * @var array
*/ */
public const COMPATIBLE_VERSIONS = ['v5.']; public const COMPATIBLE_VERSIONS = '(v5\.[0-9]{2}|v6.00)';
public const TEMPOS = [ public const TEMPOS = [
[ [
@ -208,7 +208,7 @@ class Swar5 implements ReaderInterface
if($compatversion != '') { if($compatversion != '') {
$this->Release == $compatversion; $this->Release == $compatversion;
} }
if (array_search(substr($this->Release, 0, 3), self::COMPATIBLE_VERSIONS) === false) { if (preg_match(self::COMPATIBLE_VERSIONS, $this->Release) === false) {
throw new IncompatibleReaderException("This file was not created with Swar 5"); throw new IncompatibleReaderException("This file was not created with Swar 5");
} }

View File

@ -1,105 +0,0 @@
<?php
/*
* The MIT License
*
* Copyright 2019 Jeroen De Meerleer <schaak@jeroened.be>.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
use Blackbirdchess\Service\Import\IOFactory;
require_once '../vendor/autoload.php';
$sws = IOFactory::createReader('Swar-4');
$sws->read('../res/testswar.swar');
echo "Release: " . $sws->Release . PHP_EOL;
echo "Name: " . $sws->Tournament->Name . PHP_EOL;
echo "Organiser: " . $sws->Tournament->Organiser . PHP_EOL;
echo "TempoIndex: " . $sws->Tournament->TempoIndex . PHP_EOL;
echo "TempoType: " . $sws->Tournament->TournoiStd . PHP_EOL;
echo "Tempo: " . $sws->Tournament->Tempo . PHP_EOL;
echo "Place: " . $sws->Tournament->OrganiserPlace . PHP_EOL;
echo "Arbiter 1: " . $sws->Tournament->Arbiters[ 0 ] . PHP_EOL;
echo "Arbiter 2: " . $sws->Tournament->Arbiters[ 1 ] . PHP_EOL;
echo "Rounds: " . $sws->Tournament->NoOfRounds . PHP_EOL;
echo "Fidehomol: " . $sws->Tournament->FideHomol . PHP_EOL;
echo "Start-Date: " . $sws->Tournament->StartDate->format('d/m/Y') . PHP_EOL;
echo "End-Date: " . $sws->Tournament->EndDate->format('d/m/Y') . PHP_EOL;
echo "System: " . $sws->Tournament->System->getKey() . PHP_EOL;
echo "Place: " . $sws->Tournament->OrganiserPlace . PHP_EOL;
echo "Unrated-Elo: " . $sws->Tournament->NonRatedElo . PHP_EOL;
echo "Federation: " . $sws->Tournament->Federation . PHP_EOL;
echo "Organiser: " . $sws->Tournament->OrganiserClubNo . PHP_EOL;
echo "Fide Elo P1: " . $sws->Tournament->PlayerById(0)->getElo('Fide') . PHP_EOL;
echo "Fide Elo P2: " . $sws->Tournament->PlayerById(1)->getElo('Fide') . PHP_EOL;
echo "Fide Elo P3: " . $sws->Tournament->PlayerById(2)->getElo('Fide') . PHP_EOL;
echo "KBSB Elo P1: " . $sws->Tournament->PlayerById(0)->getElo('Nation') . PHP_EOL;
echo "KBSB Elo P2: " . $sws->Tournament->PlayerById(1)->getElo('Nation') . PHP_EOL;
echo "KBSB Elo P3: " . $sws->Tournament->PlayerById(2)->getElo('Nation') . PHP_EOL;
echo "Name P1: " . $sws->Tournament->PlayerById(0)->Name . PHP_EOL;
echo "Name P2: " . $sws->Tournament->PlayerById(1)->Name . PHP_EOL;
echo "Name P3: " . $sws->Tournament->PlayerById(2)->Name . PHP_EOL;
echo "Gender P1: " . $sws->Tournament->PlayerById(0)->Gender->getKey() . PHP_EOL;
echo "Gender P2: " . $sws->Tournament->PlayerById(1)->Gender->getKey() . PHP_EOL;
echo "Gender P3: " . $sws->Tournament->PlayerById(2)->Gender->getKey() . PHP_EOL;
echo "Absent P1: " . $sws->Tournament->PlayerById(0)->Absent . PHP_EOL;
echo "Absent P2: " . $sws->Tournament->PlayerById(1)->Absent . PHP_EOL;
echo "Absent P3: " . $sws->Tournament->PlayerById(2)->Absent . PHP_EOL;
echo "Category P1: " . $sws->Tournament->PlayerById(0)->Category . PHP_EOL;
echo "Category P2: " . $sws->Tournament->PlayerById(1)->Category . PHP_EOL;
echo "Category P3: " . $sws->Tournament->PlayerById(2)->Category . PHP_EOL;
echo "Date Round 1: " . $sws->Tournament->RoundByNo(0)->Date->format('d/m/Y') . PHP_EOL;
echo "Date Round 2: " . $sws->Tournament->RoundByNo(1)->Date->format('d/m/Y') . PHP_EOL;
echo "Date Round 3: " . $sws->Tournament->RoundByNo(2)->Date->format('d/m/Y') . PHP_EOL;
echo "Game Round 1: " . $sws->Tournament->RoundByNo(0)->Games[ 0 ]->Result->getValue() . PHP_EOL;
echo "Game Round 2: " . $sws->Tournament->RoundByNo(1)->Games[ 0 ]->Result->getValue() . PHP_EOL;
echo "Game Round 3: " . $sws->Tournament->RoundByNo(2)->Games[ 0 ]->Result->getValue() . PHP_EOL;
echo "Color Pairing 1: " . $sws->Tournament->Pairings[ 1 ]->Color->getKey() . PHP_EOL;
echo "Color Pairing 2: " . $sws->Tournament->Pairings[ 2 ]->Color->getKey() . PHP_EOL;
echo "Color Pairing 3: " . $sws->Tournament->Pairings[ 3 ]->Color->getKey() . PHP_EOL;
echo "Player Pairing 1: " . $sws->Tournament->Pairings[ 0 ]->Player->Name . PHP_EOL;
echo "Player Pairing 2: " . $sws->Tournament->Pairings[ 1 ]->Player->Name . PHP_EOL;
echo "Player Pairing 3: " . $sws->Tournament->Pairings[ 2 ]->Player->Name . PHP_EOL;
echo "Bye Round 1: " . $sws->Tournament->RoundByNo(2)->Bye[ 0 ]->Player->Name . PHP_EOL;
echo "Absent Round 1: " . $sws->Tournament->RoundByNo(2)->Absent[ 0 ]->Player->Name . PHP_EOL;
echo "Tiebreak 1: " . $sws->Tournament->Tiebreaks[ 0 ]->getValue() . PHP_EOL;
echo "Tiebreak 2: " . $sws->Tournament->Tiebreaks[ 1 ]->getValue() . PHP_EOL;
echo "Tiebreak 3: " . $sws->Tournament->Tiebreaks[ 2 ]->getValue() . PHP_EOL;
echo "Tiebreak 4: " . $sws->Tournament->Tiebreaks[ 3 ]->getValue() . PHP_EOL;
echo "Tiebreak 5: " . $sws->Tournament->Tiebreaks[ 4 ]->getValue() . PHP_EOL;
echo "Tiebreak 6: " . $sws->Tournament->Tiebreaks[ 5 ]->getValue() . PHP_EOL;
echo "Average Elo: " . $sws->Tournament->AverageElo . PHP_EOL;
foreach ($sws->Tournament->RankingForCategory('+2500') as $player) {
echo str_pad($player->Name . '(' . $player->getElo($sws->Tournament->PriorityElo) . ') ', 35) .
implode_pad(' ', $player->Tiebreaks, 5, ' ') .
PHP_EOL;
}
function implode_pad($glue, $collection, $padlength, $padstring): string
{
$newarray = [];
foreach ($collection as $elem) {
$newarray[] = str_pad($elem, $padlength, $padstring);
}
return implode($glue, $newarray);
}

View File

@ -0,0 +1,44 @@
<?php
namespace Blackbirdchess\Tests\Service\Import\Readers;
use Blackbirdchess\Service\Import\Readers\Pairtwo6;
use PHPUnit\Framework\TestCase;
class Pairtwo6Test extends TestCase
{
private string $testfile = '/res/Pairtwo6-testfile.sws';
private Pairtwo6 $testobject;
public function setUp(): void
{
$this->testfile = getcwd() . $this->testfile;
$this->testobject = new Pairtwo6();
$this->testobject->read($this->testfile);
}
public function testReadTournamentName(): void
{
$this->assertEquals('Blackbird Chess Unit Test Tournament', $this->testobject->Tournament->Name);
}
public function testReadTournamentOrganiser(): void
{
$this->assertEquals('Blackbird Chess Developers', $this->testobject->Tournament->Organiser);
}
public function testReadTournamentLocation(): void
{
$this->assertEquals('Waregem', $this->testobject->Tournament->OrganiserPlace);
}
public function testHas8Players(): void
{
$this->assertCount(8, $this->testobject->Tournament->Players);
}
public function testHas7Rounds(): void
{
$this->assertCount(7, $this->testobject->Tournament->Rounds);
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace Blackbirdchess\Tests\Service\Import\Readers;
use Blackbirdchess\Service\Import\Readers\Swar5;
use PHPUnit\Framework\TestCase;
class Swar5Test extends TestCase
{
private string $swarfile = '/res/Swar5-testfile.swar';
private Swar5 $testobject;
public function setUp(): void
{
$this->swarfile = getcwd() . $this->swarfile;
$this->testobject = new Swar5();
$this->testobject->read($this->swarfile);
}
public function testReadTournamentName(): void
{
$this->assertEquals('Blackbird Chess Unit Test Tournament', $this->testobject->Tournament->Name);
}
public function testReadTournamentOrganiser(): void
{
$this->assertEquals('Blackbird Chess Developers', $this->testobject->Tournament->Organiser);
}
public function testReadTournamentLocation(): void
{
$this->assertEquals('Waregem', $this->testobject->Tournament->OrganiserPlace);
}
public function testHas8Players(): void
{
$this->assertCount(8, $this->testobject->Tournament->Players);
}
public function testHas7Rounds(): void
{
$this->assertCount(7, $this->testobject->Tournament->Rounds);
}
}