release: v3.1.0 premium smart core engines and 14 new accessibility rules

This commit is contained in:
Enes Yakıştır
2026-07-13 10:54:25 +03:00
parent 7f3bf3cb7d
commit 5292c2c865
67 changed files with 2639 additions and 29 deletions
@@ -0,0 +1,29 @@
<?php
namespace YakNet\AccessibilityConsole\Tests\Core;
use PHPUnit\Framework\TestCase;
use YakNet\AccessibilityConsole\Core\Metrics\AccessibilityScoreCalculator;
use YakNet\AccessibilityConsole\Core\Violation;
use YakNet\AccessibilityConsole\Core\Severity;
use YakNet\AccessibilityConsole\Core\WCAGStandard;
class AccessibilityScoreCalculatorTest extends TestCase
{
public function testScoreCalculationWithNoViolations(): void
{
$metrics = AccessibilityScoreCalculator::calculate([]);
$this->assertSame(100, $metrics['score']);
}
public function testScoreCalculationDeductions(): void
{
$violations = [
new Violation('WCAG_1_1_1_ALT', 'Img alt missing', Severity::ERROR, WCAGStandard::A, '<img>'), // -8
new Violation('WCAG_2_4_3_AUTOFOCUS', 'Autofocus usage', Severity::WARNING, WCAGStandard::A, '<input autofocus>') // -3
];
$metrics = AccessibilityScoreCalculator::calculate($violations);
$this->assertSame(89, $metrics['score']); // 100 - 8 - 3 = 89
}
}
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace YakNet\AccessibilityConsole\Tests\Core;
use PHPUnit\Framework\TestCase;
use YakNet\AccessibilityConsole\Core\Baseline\FuzzyBaselineMatcher;
class FuzzyBaselineMatcherTest extends TestCase
{
public function testFuzzyMatchIgnoresAttributeOrderAndSpaces(): void
{
$snippetA = '<img src="logo.png" alt="logo" class="banner">';
$snippetB = ' <img class="banner" src="logo.png" alt="logo"> ';
$this->assertTrue(FuzzyBaselineMatcher::match($snippetA, $snippetB));
}
public function testNormalizeLowercaseTags(): void
{
$html = '<IMG SRC="logo.png" ALT="logo">';
$norm = FuzzyBaselineMatcher::normalize($html);
$this->assertSame('<img alt="logo" src="logo.png">', $norm);
}
}
+44
View File
@@ -0,0 +1,44 @@
<?php
namespace YakNet\AccessibilityConsole\Tests\Core;
use PHPUnit\Framework\TestCase;
use YakNet\AccessibilityConsole\Core\SelfHealing\LocalHealer;
use YakNet\AccessibilityConsole\Core\Violation;
use YakNet\AccessibilityConsole\Core\Severity;
use YakNet\AccessibilityConsole\Core\WCAGStandard;
class LocalHealerTest extends TestCase
{
public function testHealsBlinkTag(): void
{
$healer = new LocalHealer();
$violation = new Violation(
ruleId: 'WCAG_2_2_2_BLINK',
message: 'Banned blink tag.',
severity: Severity::ERROR,
standard: WCAGStandard::A,
htmlSnippet: '<blink>Hello</blink>'
);
$result = $healer->heal($violation);
$this->assertNotNull($result);
$this->assertStringContainsString('FIX: <span style="text-decoration: blink;">Hello</span>', $result);
}
public function testHealsAutofocusAttribute(): void
{
$healer = new LocalHealer();
$violation = new Violation(
ruleId: 'WCAG_2_4_3_AUTOFOCUS',
message: 'Banned autofocus attribute.',
severity: Severity::WARNING,
standard: WCAGStandard::A,
htmlSnippet: '<input type="text" autofocus />'
);
$result = $healer->heal($violation);
$this->assertNotNull($result);
$this->assertStringContainsString('FIX: <input type="text" />', $result);
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace YakNet\AccessibilityConsole\Tests\Core;
use PHPUnit\Framework\TestCase;
use YakNet\AccessibilityConsole\Core\Diff\VisualDiffGenerator;
class VisualDiffGeneratorTest extends TestCase
{
public function testGeneratesVisualDiff(): void
{
$generator = new VisualDiffGenerator();
$original = "hello world\nfoo\n";
$fixed = "hello world\nbar\n";
$diff = $generator->generate($original, $fixed);
$this->assertStringContainsString('--- Original', $diff);
$this->assertStringContainsString('+++ Healed', $diff);
$this->assertStringContainsString('<fg=red>-foo', $diff);
$this->assertStringContainsString('<fg=green>+bar', $diff);
}
}