Skip to content

Commit

Permalink
Fix loading order
Browse files Browse the repository at this point in the history
  • Loading branch information
chenos committed Feb 6, 2018
1 parent cd31fa3 commit c6b5cda
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 24 deletions.
8 changes: 0 additions & 8 deletions src/FileNotFoundException.php

This file was deleted.

12 changes: 7 additions & 5 deletions src/ModuleLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public function normaliseIdentifier($base, $moduleName)
}

if (! $file) {
throw new FileNotFoundException("'$moduleName' module does not exists.");
throw new ModuleNotFoundException("Cannot find module '$moduleName'");
}

return [$this->fs->dirname($file), $this->fs->filename($file)];
Expand Down Expand Up @@ -134,16 +134,18 @@ public function getModuleFile($path)
}
}

if ($this->fs->exists($fullPath = $this->fs->pathJoin($path, 'index.js'))) {
return $this->pathCache[$path] = $fullPath;
}

foreach ($this->extensions as $extension) {
if ($this->fs->exists($path.$extension)) {
return $this->pathCache[$path] = $path.$extension;
}
}

foreach ($this->extensions as $extension) {
if ($this->fs->exists("{$path}/index{$extension}")) {
return $this->pathCache[$path] = "{$path}/index{$extension}";
}
}

return false;
}
}
8 changes: 8 additions & 0 deletions src/ModuleNotFoundException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace Chenos\V8Js\ModuleLoader;

final class ModuleNotFoundException extends \Exception
{

}
145 changes: 134 additions & 11 deletions tests/NormaliseIdentifierTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use PHPUnit\Framework\TestCase;
use Chenos\V8Js\ModuleLoader\ModuleLoader;
use Chenos\V8Js\ModuleLoader\FileNotFoundException;
use Chenos\V8Js\ModuleLoader\ModuleNotFoundException;

class NormaliseIdentifierTest extends TestCase
{
Expand Down Expand Up @@ -87,9 +87,11 @@ public function testPriority1()
$loader = $this->newModuleLoader([
'/app/foo/bar/main' => false,
'/app/foo/bar/main.js' => '',
'/app/foo/bar/main/index.js' => '',
'/app/foo/bar/main/dist/foo.js' => '',
'/app/foo/bar/main.json' => '',
'/app/foo/bar/main/package.json' => '{"main": "dist/foo.js"}',
'/app/foo/bar/main/dist/foo.js' => '',
'/app/foo/bar/main/index.js' => '',
'/app/foo/bar/main/index.json' => '',
]);

$this->assertExamples($loader, [
Expand All @@ -110,7 +112,86 @@ public function testPriority2()
$loader = $this->newModuleLoader([
'/app/foo/bar/main' => false,
'/app/foo/bar/main.js' => '',
'/app/foo/bar/main.json' => '',
'/app/foo/bar/main/package.json' => '{}',
'/app/foo/bar/main/dist/foo.js' => '',
'/app/foo/bar/main/index.js' => '',
'/app/foo/bar/main/index.json' => '',
]);

$this->assertExamples($loader, [
['', './foo/bar/main', '/app/foo/bar', 'main.js'],
['./foo', './bar/main', '/app/foo/bar', 'main.js'],
['./foo/bar', './main', '/app/foo/bar', 'main.js'],
['/app', './foo/bar/main', '/app/foo/bar', 'main.js'],
['/app/foo', './bar/main', '/app/foo/bar', 'main.js'],
['/app/foo/bar', './main', '/app/foo/bar', 'main.js'],
]);
}

/**
* @group priority
*/
public function testPriority3()
{
$loader = $this->newModuleLoader([
'/app/foo/bar/main' => false,
'/app/foo/bar/main.js' => '',
'/app/foo/bar/main.json' => '',
// '/app/foo/bar/main/package.json' => '{}',
'/app/foo/bar/main/dist/foo.js' => '',
'/app/foo/bar/main/index.js' => '',
'/app/foo/bar/main/index.json' => '',
]);

$this->assertExamples($loader, [
['', './foo/bar/main', '/app/foo/bar', 'main.js'],
['./foo', './bar/main', '/app/foo/bar', 'main.js'],
['./foo/bar', './main', '/app/foo/bar', 'main.js'],
['/app', './foo/bar/main', '/app/foo/bar', 'main.js'],
['/app/foo', './bar/main', '/app/foo/bar', 'main.js'],
['/app/foo/bar', './main', '/app/foo/bar', 'main.js'],
]);
}

/**
* @group priority
*/
public function testPriority4()
{
$loader = $this->newModuleLoader([
'/app/foo/bar/main' => false,
// '/app/foo/bar/main.js' => '',
'/app/foo/bar/main.json' => '',
// '/app/foo/bar/main/package.json' => '{}',
'/app/foo/bar/main/dist/foo.js' => '',
'/app/foo/bar/main/index.js' => '',
'/app/foo/bar/main/index.json' => '',
]);

$this->assertExamples($loader, [
['', './foo/bar/main', '/app/foo/bar', 'main.json'],
['./foo', './bar/main', '/app/foo/bar', 'main.json'],
['./foo/bar', './main', '/app/foo/bar', 'main.json'],
['/app', './foo/bar/main', '/app/foo/bar', 'main.json'],
['/app/foo', './bar/main', '/app/foo/bar', 'main.json'],
['/app/foo/bar', './main', '/app/foo/bar', 'main.json'],
]);
}

/**
* @group priority
*/
public function testPriority5()
{
$loader = $this->newModuleLoader([
'/app/foo/bar/main' => false,
// '/app/foo/bar/main.js' => '',
// '/app/foo/bar/main.json' => '',
// '/app/foo/bar/main/package.json' => '{}',
'/app/foo/bar/main/dist/foo.js' => '',
'/app/foo/bar/main/index.js' => '',
'/app/foo/bar/main/index.json' => '',
]);

$this->assertExamples($loader, [
Expand All @@ -123,6 +204,49 @@ public function testPriority2()
]);
}

/**
* @group priority
*/
public function testPriority6()
{
$loader = $this->newModuleLoader([
'/app/foo/bar/main' => false,
// '/app/foo/bar/main.js' => '',
// '/app/foo/bar/main.json' => '',
// '/app/foo/bar/main/package.json' => '{}',
// '/app/foo/bar/main/dist/foo.js' => '',
// '/app/foo/bar/main/index.js' => '',
'/app/foo/bar/main/index.json' => '',
]);

$this->assertExamples($loader, [
['', './foo/bar/main', '/app/foo/bar/main', 'index.json'],
['./foo', './bar/main', '/app/foo/bar/main', 'index.json'],
['./foo/bar', './main', '/app/foo/bar/main', 'index.json'],
['/app', './foo/bar/main', '/app/foo/bar/main', 'index.json'],
['/app/foo', './bar/main', '/app/foo/bar/main', 'index.json'],
['/app/foo/bar', './main', '/app/foo/bar/main', 'index.json'],
]);
}


public function testPriority7()
{
$this->expectException(ModuleNotFoundException::class);

$loader = $this->newModuleLoader([
'/app/foo/bar/main' => false,
// '/app/foo/bar/main.js' => '',
// '/app/foo/bar/main.json' => '',
// '/app/foo/bar/main/package.json' => '{}',
// '/app/foo/bar/main/dist/foo.js' => '',
// '/app/foo/bar/main/index.js' => '',
// '/app/foo/bar/main/index.json' => '',
]);

$loader->loadModule('./foo/bar/main');
}

/**
* @group module
*/
Expand Down Expand Up @@ -296,9 +420,9 @@ public function testLoadModule()
]);

$this->assertEquals('foo', $loader->loadModule('/app/foo.js'));
$this->assertEquals('foo', $loader->loadModule('./foo.js', false));
$this->assertEquals('foo', $loader->loadModule('./foo.js'));
$this->assertEquals('bar', $loader->loadModule('/app/bar.js'));
$this->assertEquals('bar', $loader->loadModule('./bar.js', false));
$this->assertEquals('bar', $loader->loadModule('./bar.js'));
}

public function testLoadModuleException()
Expand All @@ -308,16 +432,15 @@ public function testLoadModuleException()
'/app/bar.js' => 'bar',
]);

$this->expectException(FileNotFoundException::class);
$this->expectExceptionMessage("'./baz.js' module does not exists.");

$this->assertFalse($loader->loadModule('./baz.js', false));
$this->expectException(ModuleNotFoundException::class);
$this->expectExceptionMessage("Cannot find module './baz.js'");
$this->assertFalse($loader->loadModule('./baz.js'));
}

public function testException()
{
$this->expectException(FileNotFoundException::class);
$this->expectExceptionMessage("'./app' module does not exists.");
$this->expectException(ModuleNotFoundException::class);
$this->expectExceptionMessage("Cannot find module './app'");
$loader = $this->newModuleLoader([]);
$loader->normaliseIdentifier('', './app');
}
Expand Down

0 comments on commit c6b5cda

Please sign in to comment.