1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
<?php
/**
* James doesn't like having to manually fix these things.
* @group ReleaseNotes
*/
class ReleaseNotesTest extends MediaWikiUnitTestCase {
/**
* Verify that at least one Release Notes file exists, have content, and
* aren't overly long.
*
* @group documentation
* @coversNothing
*/
public function testReleaseNotesFilesExistAndAreNotMalformed() {
global $IP;
$notesFiles = glob( "$IP/RELEASE-NOTES-*" );
$this->assertGreaterThanOrEqual(
1,
count( $notesFiles ),
'Repo has at least one Release Notes file.'
);
$versionParts = explode( '.', explode( '-', MW_VERSION )[0] );
$this->assertContains(
"$IP/RELEASE-NOTES-$versionParts[0].$versionParts[1]",
$notesFiles,
'Repo has a Release Notes file for the current MW_VERSION.'
);
foreach ( $notesFiles as $fileName ) {
$this->assertFileLength( "Release Notes", $fileName );
}
}
public static function provideFilesAtRoot() {
global $IP;
$rootFiles = [
"COPYING",
"FAQ",
"HISTORY",
"INSTALL",
"SECURITY",
];
foreach ( $rootFiles as $rootFile ) {
yield "$rootFile file" => [ "$IP/$rootFile" ];
}
}
/**
* @dataProvider provideFilesAtRoot
* @coversNothing
*/
public function testRootFilesHaveProperLineLength( $fileName ) {
$this->assertFileLength( "Help", $fileName );
}
private function assertFileLength( $type, $fileName ) {
$lines = file( $fileName, FILE_IGNORE_NEW_LINES );
$this->assertNotFalse(
$lines,
"$type file '$fileName' is inaccessible."
);
// FILE_IGNORE_NEW_LINES drops the \n at the EOL, so max length is 80 not 81.
$maxLength = 80;
$errors = [];
foreach ( $lines as $i => $line ) {
$length = mb_strlen( $line );
if ( $length <= $maxLength ||
// Lines with nothing but a long URL cannot be split further
preg_match( '/^\W*https?:\/\/\S*$/', $line )
) {
continue;
}
$num = $i + 1;
$errors[] = "line $num: length $length > $maxLength:\n$line";
}
// Use assertSame() instead of assertEqual(), to show the full line in the diff
$this->assertSame(
[],
$errors,
"$type file '$fileName' lines have at most $maxLength characters"
);
}
}
|