Separate MediaWiki unit and integration tests
[lhc/web/wiklou.git] / tests / phpunit / unit / documentation / ReleaseNotesTest.php
1 <?php
2
3 /**
4 * James doesn't like having to manually fix these things.
5 */
6 class ReleaseNotesTest extends \MediaWikiUnitTestCase {
7 /**
8 * Verify that at least one Release Notes file exists, have content, and
9 * aren't overly long.
10 *
11 * @group documentation
12 * @coversNothing
13 */
14 public function testReleaseNotesFilesExistAndAreNotMalformed() {
15 global $wgVersion, $IP;
16
17 $notesFiles = glob( "$IP/RELEASE-NOTES-*" );
18
19 $this->assertGreaterThanOrEqual(
20 1,
21 count( $notesFiles ),
22 'Repo has at least one Release Notes file.'
23 );
24
25 $versionParts = explode( '.', explode( '-', $wgVersion )[0] );
26 $this->assertContains(
27 "$IP/RELEASE-NOTES-$versionParts[0].$versionParts[1]",
28 $notesFiles,
29 'Repo has a Release Notes file for the current $wgVersion.'
30 );
31
32 foreach ( $notesFiles as $index => $fileName ) {
33 $this->assertFileLength( "Release Notes", $fileName );
34 }
35
36 // Also test the README and similar files
37 $otherFiles = [
38 "$IP/COPYING",
39 "$IP/FAQ",
40 "$IP/HISTORY",
41 "$IP/INSTALL",
42 "$IP/README",
43 "$IP/SECURITY"
44 ];
45
46 foreach ( $otherFiles as $index => $fileName ) {
47 $this->assertFileLength( "Help", $fileName );
48 }
49 }
50
51 private function assertFileLength( $type, $fileName ) {
52 $file = file( $fileName, FILE_IGNORE_NEW_LINES );
53
54 $this->assertFalse(
55 !$file,
56 "$type file '$fileName' is inaccessible."
57 );
58
59 foreach ( $file as $i => $line ) {
60 $num = $i + 1;
61 $this->assertLessThanOrEqual(
62 // FILE_IGNORE_NEW_LINES drops the \n at the EOL, so max length is 80 not 81.
63 80,
64 mb_strlen( $line ),
65 "$type file '$fileName' line $num, is longer than 80 chars:\n\t'$line'"
66 );
67 }
68 }
69 }