Completed
Push — fix/sync-checksum-comments ( 2626c3...1807a8 )
by
unknown
204:49 queued 195:31
created

test_reads_single_plugin_manifest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13

Duplication

Lines 13
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 13
loc 13
rs 9.8333
c 0
b 0
f 0
1
<?php // phpcs:ignore WordPress.Files.FileName
2
/**
3
 * File loader test suite.
4
 *
5
 * @package automattic/jetpack-autoloader
6
 */
7
8
// We live in the namespace of the test autoloader to avoid many use statements.
9
namespace Automattic\Jetpack\Autoloader\jpCurrent;
10
11
use Classmap_Test_Class;
12
use PHPUnit\Framework\TestCase;
13
use Test_Plugin_Factory;
14
15
/**
16
 * Test suite class for the Autoloader part that handles file loading.
17
 */
18
class ManifestReaderTest extends TestCase {
19
20
	/**
21
	 * The older version of the autoloader that we want to use. Note that
22
	 * the version should support PSR-4 since this one does.
23
	 */
24
	const OLDER_VERSION = '2.4.0.0';
25
26
	/**
27
	 * The directory of a plugin using the autoloader.
28
	 *
29
	 * @var string
30
	 */
31
	private static $older_plugin_dir;
32
33
	/**
34
	 * The manifest reader we're testing.
35
	 *
36
	 * @var Manifest_Reader
37
	 */
38
	private $reader;
39
40
	/**
41
	 * Setup before class runs before the class.
42
	 *
43
	 * @beforeClass
44
	 */
45
	public static function set_up_before_class() {
46
		self::$older_plugin_dir = Test_Plugin_Factory::create_test_plugin( false, self::OLDER_VERSION )->make();
47
	}
48
49
	/**
50
	 * Setup runs before each test.
51
	 *
52
	 * @before
53
	 */
54
	public function set_up() {
55
		$this->reader = new Manifest_Reader( new Version_Selector() );
56
	}
57
58
	/**
59
	 * Tests that nothing is read without any plugins.
60
	 */
61
	public function test_reads_nothing_without_plugins() {
62
		$input_array = array();
63
64
		$this->reader->read_manifests(
65
			array(),
66
			'vendor/composer/jetpack_autoload_classmap.php',
67
			$input_array
68
		);
69
70
		$this->assertEmpty( $input_array );
71
	}
72
73
	/**
74
	 * Tests that nothing is read for plugins that have no manifest.
75
	 */
76
	public function test_reads_nothing_for_plugins_without_manifests() {
77
		$input_array = array();
78
79
		$this->reader->read_manifests(
80
			array( TEST_PACKAGE_DIR ),
81
			'vendor/composer/jetpack_autoload_classmap.php',
82
			$input_array
83
		);
84
85
		$this->assertEmpty( $input_array );
86
	}
87
88
	/**
89
	 * Tests that a single plugin manifest can be read successfully.
90
	 */
91 View Code Duplication
	public function test_reads_single_plugin_manifest() {
92
		$input_array = array();
93
94
		$this->reader->read_manifests(
95
			array( TEST_PLUGIN_DIR ),
96
			'vendor/composer/jetpack_autoload_classmap.php',
97
			$input_array
98
		);
99
100
		$this->assertArrayHasKey( Classmap_Test_Class::class, $input_array );
101
		$this->assertEquals( Test_Plugin_Factory::VERSION_CURRENT, $input_array[ Classmap_Test_Class::class ]['version'] );
102
		$this->assertEquals( $input_array[ Classmap_Test_Class::class ]['path'], TEST_PLUGIN_DIR . '/includes/class-classmap-test-class.php' );
103
	}
104
105
	/**
106
	 * Tests that the reader only keeps the latest version when processing multiple manifests.
107
	 */
108 View Code Duplication
	public function test_read_overwrites_older_version_in_manifest() {
109
		$input_array = array();
110
111
		$this->reader->read_manifests(
112
			array( self::$older_plugin_dir, TEST_PLUGIN_DIR ),
113
			'vendor/composer/jetpack_autoload_classmap.php',
114
			$input_array
115
		);
116
117
		$this->assertArrayHasKey( Classmap_Test_Class::class, $input_array );
118
		$this->assertEquals( Test_Plugin_Factory::VERSION_CURRENT, $input_array[ Classmap_Test_Class::class ]['version'] );
119
		$this->assertEquals( $input_array[ Classmap_Test_Class::class ]['path'], TEST_PLUGIN_DIR . '/includes/class-classmap-test-class.php' );
120
	}
121
122
	/**
123
	 * Tests that the reader ignores older versions when a newer version is already set.
124
	 */
125 View Code Duplication
	public function test_read_ignores_older_version_when_newer_already_loaded() {
126
		$input_array = array();
127
128
		$this->reader->read_manifests(
129
			array( TEST_PLUGIN_DIR, self::$older_plugin_dir ),
130
			'vendor/composer/jetpack_autoload_classmap.php',
131
			$input_array
132
		);
133
134
		$this->assertArrayHasKey( Classmap_Test_Class::class, $input_array );
135
		$this->assertEquals( Test_Plugin_Factory::VERSION_CURRENT, $input_array[ Classmap_Test_Class::class ]['version'] );
136
		$this->assertEquals( $input_array[ Classmap_Test_Class::class ]['path'], TEST_PLUGIN_DIR . '/includes/class-classmap-test-class.php' );
137
	}
138
}
139