1<?php 2 3/* 4 * This file is part of the Fxp Composer Asset Plugin package. 5 * 6 * (c) François Pluchino <francois.pluchino@gmail.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Fxp\Composer\AssetPlugin\Tests\Converter; 13 14use Fxp\Composer\AssetPlugin\Converter\NpmPackageConverter; 15use Fxp\Composer\AssetPlugin\Converter\NpmPackageUtil; 16use Fxp\Composer\AssetPlugin\Type\AssetTypeInterface; 17 18/** 19 * Tests of npm package converter. 20 * 21 * @author François Pluchino <francois.pluchino@gmail.com> 22 * 23 * @internal 24 */ 25final class NpmPackageConverterTest extends AbstractPackageConverterTest 26{ 27 protected function setUp() 28 { 29 parent::setUp(); 30 31 /** @var AssetTypeInterface $type */ 32 $type = $this->type; 33 $this->converter = new NpmPackageConverter($type); 34 $this->asset = $this->loadPackage(); 35 } 36 37 public function testConvert() 38 { 39 $composer = $this->converter->convert($this->asset); 40 41 $this->assertArrayHasKey('name', $composer); 42 $this->assertSame('ASSET/'.$this->asset['name'], $composer['name']); 43 44 $this->assertArrayHasKey('type', $composer); 45 $this->assertSame('ASSET_TYPE', $composer['type']); 46 47 $this->assertArrayHasKey('description', $composer); 48 $this->assertSame($this->asset['description'], $composer['description']); 49 50 $this->assertArrayHasKey('version', $composer); 51 $this->assertSame('1.0.0-pre', $composer['version']); 52 53 $this->assertArrayHasKey('keywords', $composer); 54 $this->assertSame($this->asset['keywords'], $composer['keywords']); 55 56 $this->assertArrayHasKey('homepage', $composer); 57 $this->assertSame($this->asset['homepage'], $composer['homepage']); 58 59 $this->assertArrayHasKey('license', $composer); 60 $this->assertSame($this->asset['license'], $composer['license']); 61 62 $this->assertArrayHasKey('authors', $composer); 63 $this->assertSame(array_merge(array($this->asset['author']), $this->asset['contributors']), $composer['authors']); 64 65 $this->assertArrayHasKey('require', $composer); 66 $this->assertSame(array( 67 'ASSET/library1' => '>= 1.0.0', 68 'ASSET/library2' => '>= 1.0.0', 69 'ASSET/library2-0.9.0' => '0.9.0', 70 'ASSET/library3' => '*', 71 'ASSET/library4' => '1.2.3', 72 'ASSET/library5' => 'dev-default#0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b', 73 'ASSET/library6' => 'dev-branch', 74 'ASSET/library7' => 'dev-1.2.* || 1.2.*', 75 'ASSET/library8' => 'dev-1.2.x || 1.2.x', 76 'ASSET/library9' => 'dev-master', 77 'ASSET/library10' => '1.0.0', 78 'ASSET/library11' => '*', 79 'ASSET/library12' => '>=1 <2', 80 'ASSET/library13' => '>=1 <2', 81 'ASSET/library14' => '*', 82 'ASSET/library15' => '*', 83 'ASSET/library16' => '>=1 <2', 84 'ASSET/test-library17-file' => '*', 85 'ASSET/test-library18-file' => '1.2.3', 86 'ASSET/test-library19-file' => '*', 87 'ASSET/test-library20-file' => '*', 88 'ASSET/library21' => '1 || 2', 89 ), $composer['require']); 90 91 $this->assertArrayNotHasKey('require-dev', $composer); 92 93 $this->assertArrayHasKey('bin', $composer); 94 $this->assertInternalType('array', $composer['bin']); 95 $this->assertSame($this->asset['bin'], $composer['bin'][0]); 96 97 $this->assertArrayHasKey('extra', $composer); 98 99 $this->assertArrayHasKey('npm-asset-bugs', $composer['extra']); 100 $this->assertSame($this->asset['bugs'], $composer['extra']['npm-asset-bugs']); 101 102 $this->assertArrayHasKey('npm-asset-files', $composer['extra']); 103 $this->assertSame($this->asset['files'], $composer['extra']['npm-asset-files']); 104 105 $this->assertArrayHasKey('npm-asset-main', $composer['extra']); 106 $this->assertSame($this->asset['main'], $composer['extra']['npm-asset-main']); 107 108 $this->assertArrayHasKey('npm-asset-man', $composer['extra']); 109 $this->assertSame($this->asset['man'], $composer['extra']['npm-asset-man']); 110 111 $this->assertArrayHasKey('npm-asset-directories', $composer['extra']); 112 $this->assertSame($this->asset['directories'], $composer['extra']['npm-asset-directories']); 113 114 $this->assertArrayHasKey('npm-asset-repository', $composer['extra']); 115 $this->assertSame($this->asset['repository'], $composer['extra']['npm-asset-repository']); 116 117 $this->assertArrayHasKey('npm-asset-scripts', $composer['extra']); 118 $this->assertSame($this->asset['scripts'], $composer['extra']['npm-asset-scripts']); 119 120 $this->assertArrayHasKey('npm-asset-config', $composer['extra']); 121 $this->assertSame($this->asset['config'], $composer['extra']['npm-asset-config']); 122 123 $this->assertArrayHasKey('npm-asset-bundled-dependencies', $composer['extra']); 124 $this->assertSame($this->asset['bundledDependencies'], $composer['extra']['npm-asset-bundled-dependencies']); 125 126 $this->assertArrayHasKey('npm-asset-optional-dependencies', $composer['extra']); 127 $this->assertSame($this->asset['optionalDependencies'], $composer['extra']['npm-asset-optional-dependencies']); 128 129 $this->assertArrayHasKey('npm-asset-engines', $composer['extra']); 130 $this->assertSame($this->asset['engines'], $composer['extra']['npm-asset-engines']); 131 132 $this->assertArrayHasKey('npm-asset-engine-strict', $composer['extra']); 133 $this->assertSame($this->asset['engineStrict'], $composer['extra']['npm-asset-engine-strict']); 134 135 $this->assertArrayHasKey('npm-asset-os', $composer['extra']); 136 $this->assertSame($this->asset['os'], $composer['extra']['npm-asset-os']); 137 138 $this->assertArrayHasKey('npm-asset-cpu', $composer['extra']); 139 $this->assertSame($this->asset['cpu'], $composer['extra']['npm-asset-cpu']); 140 141 $this->assertArrayHasKey('npm-asset-prefer-global', $composer['extra']); 142 $this->assertSame($this->asset['preferGlobal'], $composer['extra']['npm-asset-prefer-global']); 143 144 $this->assertArrayHasKey('npm-asset-private', $composer['extra']); 145 $this->assertSame($this->asset['private'], $composer['extra']['npm-asset-private']); 146 147 $this->assertArrayHasKey('npm-asset-publish-config', $composer['extra']); 148 $this->assertSame($this->asset['publishConfig'], $composer['extra']['npm-asset-publish-config']); 149 150 $this->assertArrayNotHasKey('time', $composer); 151 $this->assertArrayNotHasKey('support', $composer); 152 $this->assertArrayNotHasKey('conflict', $composer); 153 $this->assertArrayNotHasKey('replace', $composer); 154 $this->assertArrayNotHasKey('provide', $composer); 155 $this->assertArrayNotHasKey('suggest', $composer); 156 $this->assertArrayNotHasKey('autoload', $composer); 157 $this->assertArrayNotHasKey('autoload-dev', $composer); 158 $this->assertArrayNotHasKey('include-path', $composer); 159 $this->assertArrayNotHasKey('target-dir', $composer); 160 $this->assertArrayNotHasKey('archive', $composer); 161 } 162 163 public function testConvertWithScope() 164 { 165 $this->asset = $this->loadPackage('npm-scope.json'); 166 $composer = $this->converter->convert($this->asset); 167 168 $this->assertArrayHasKey('name', $composer); 169 $this->assertSame('ASSET/scope--test', $composer['name']); 170 171 $this->assertArrayHasKey('require', $composer); 172 $this->assertSame(array( 173 'ASSET/scope--library1' => '>= 1.0.0', 174 'ASSET/scope2--library2' => '>= 1.0.0', 175 ), $composer['require']); 176 177 $this->assertArrayNotHasKey('require-dev', $composer); 178 } 179 180 public function getConvertDistData() 181 { 182 return array( 183 array(array('type' => null), array()), 184 array(array('foo' => 'http://example.com'), array()), // unknown downloader type 185 array(array('gzip' => 'http://example.com'), array('type' => 'gzip', 'url' => 'https://example.com')), 186 array(array('tarball' => 'http://example.com'), array('type' => 'tar', 'url' => 'https://example.com')), 187 array( 188 array('shasum' => 'abcdef0123456789abcdef0123456789abcdef01'), 189 array('shasum' => 'abcdef0123456789abcdef0123456789abcdef01'), 190 ), 191 ); 192 } 193 194 /** 195 * @dataProvider getConvertDistData 196 * 197 * @param array $value The value must be converted 198 * @param array $result The result of convertion 199 */ 200 public function testConvertDist($value, $result) 201 { 202 $this->assertSame($result, NpmPackageUtil::convertDist($value)); 203 } 204 205 /** 206 * Load the package. 207 * 208 * @param string $package The package file name 209 * 210 * @return array 211 */ 212 private function loadPackage($package = 'npm.json') 213 { 214 return (array) json_decode(file_get_contents(__DIR__.'/../Fixtures/package/'.$package), true); 215 } 216} 217