Skip to content

Commit

Permalink
Fix: Support single character extension. (issue gulpjs#38)
Browse files Browse the repository at this point in the history
  • Loading branch information
sttk committed Mar 28, 2021
1 parent 64cccd9 commit 91bcd17
Show file tree
Hide file tree
Showing 5 changed files with 156 additions and 3 deletions.
3 changes: 2 additions & 1 deletion lib/extension.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var path = require('path');

var EXTRE = /\.[^.]*/g;
var LONGEXTRE = /^[.]?[^.]+([.].+[^.])$/;
var LONGEXTRE = /^[.]?[^.]+([.].*[^.])$/;

module.exports = function(input) {
var basename = path.basename(input);
Expand All @@ -10,6 +10,7 @@ module.exports = function(input) {
return;
}
var possibleExtensions = longExtension[1].match(EXTRE);
/* istanbul ignore if */
if (!possibleExtensions) {
return;
}
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
"scripts": {
"lint": "eslint .",
"pretest": "rm -rf tmp/ && npm run lint",
"test": "mocha --async-only",
"cover": "istanbul cover _mocha --report lcovonly",
"test": "mocha --async-only test test/lib",
"cover": "istanbul cover _mocha --report lcovonly test test/lib",
"coveralls": "npm run cover && istanbul-coveralls"
},
"dependencies": {
Expand Down
9 changes: 9 additions & 0 deletions test/fixtures/test.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = {
data: {
trueKey: true,
falseKey: false,
subKey: {
subProp: 1
}
}
};
16 changes: 16 additions & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,22 @@ describe('rechoir', function() {

done();
});

it('should register a module loader even if the extension is single character (issue #38)', function(done) {
var fpath = path.join(__dirname, 'fixtures', 'test.s');
rechoir.prepare({
'.s': [
'nothere',
'../require-stub',
],
}, fpath);

expect(function() {
require(fpath);
}).toNotThrow(Error);

done();
});
});

});
127 changes: 127 additions & 0 deletions test/lib/extension.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
'use strict';

var expect = require('expect');
var extension = require('../../lib/extension');

describe('Take out possible extensions from a file path', function() {

it('should return an extension: ".js" from "app.js"', function(done) {
expect(extension('app.js')).toEqual('.js');
expect(extension('a/b/c/app.js')).toEqual('.js');
done();
});

it('should return extensions: ".babel.js" and ".js" from "app.babel.js"', function(done) {
expect(extension('app.babel.js')).toEqual(['.babel.js', '.js']);
expect(extension('a/b/c/app.babel.js')).toEqual(['.babel.js', '.js']);
done();
});

it('should return extensions: ".aaa.bbb.ccc", ".aaa.bbb" and ".ccc" from "app.aaa.bbb.ccc"', function(done) {
expect(extension('app.aaa.bbb.ccc')).toEqual(['.aaa.bbb.ccc', '.bbb.ccc', '.ccc']);
expect(extension('a/b/c/app.aaa.bbb.ccc')).toEqual(['.aaa.bbb.ccc', '.bbb.ccc', '.ccc']);
done();
});

it('should return an extension: ".j" from "app.j"', function(done) {
expect(extension('app.j')).toEqual('.j');
expect(extension('a/b/c/app.j')).toEqual('.j');
done();
});

it('should return extensions: ".b.j" and ".j" from "app.b.j"', function(done) {
expect(extension('app.b.j')).toEqual(['.b.j', '.j']);
expect(extension('a/b/c/app.b.j')).toEqual(['.b.j', '.j']);
done();
});

it('should return extensions: ".a.b.c", ".a.b" and ".c" from "app.a.b.c"', function(done) {
expect(extension('app.a.b.c')).toEqual(['.a.b.c', '.b.c', '.c']);
expect(extension('a/b/c/app.a.b.c')).toEqual(['.a.b.c', '.b.c', '.c']);
done();
});

it('should return undefined from "."', function(done) {
expect(extension('.')).toBe(undefined);
expect(extension('a/b/c/.')).toBe(undefined);
done();
});

it('should return undefined from ".."', function(done) {
expect(extension('..')).toBe(undefined);
expect(extension('a/b/c/..')).toBe(undefined);
done();
});

it('should return undefined from "..."', function(done) {
expect(extension('...')).toBe(undefined);
expect(extension('a/b/c/...')).toBe(undefined);
done();
});

it('should return undefined from "a."', function(done) {
expect(extension('a.')).toBe(undefined);
expect(extension('a/b/c/a.')).toBe(undefined);
done();
});

it('should return undefined from "app."', function(done) {
expect(extension('app.')).toBe(undefined);
expect(extension('a/b/c/app.')).toBe(undefined);
done();
});

it('should return undefined from "a.b.c."', function(done) {
expect(extension('a.b.c.')).toBe(undefined);
expect(extension('a/b/c/a.b.c.')).toBe(undefined);
done();
});

it('should return undefined from ".a"', function(done) {
expect(extension('.a')).toBe(undefined);
expect(extension('a/b/c/.a')).toBe(undefined);
done();
});

it('should return undefined from ".app"', function(done) {
expect(extension('.app')).toBe(undefined);
expect(extension('a/b/c/.app')).toBe(undefined);
done();
});

it('should return undefined from ".a."', function(done) {
expect(extension('.a.')).toBe(undefined);
expect(extension('a/b/c/.a.')).toBe(undefined);
done();
});

it('should return undefined from ".app."', function(done) {
expect(extension('.app.')).toBe(undefined);
expect(extension('a/b/c/.app.')).toBe(undefined);
done();
});

it('should return undefined from ".a.b.c."', function(done) {
expect(extension('.a.b.c.')).toBe(undefined);
expect(extension('a/b/c/.a.b.c.')).toBe(undefined);
done();
});

it('should return ".b.c" and ".c" from ".a.b.c"', function(done) {
expect(extension('.a.b.c')).toEqual(['.b.c', '.c']);
expect(extension('a/b/c/.a.b.c')).toEqual(['.b.c', '.c']);
done();
});

it('should return ".bb.cc" and ".cc" from ".aa.bb.cc"', function(done) {
expect(extension('.aa.bb.cc')).toEqual(['.bb.cc', '.cc']);
expect(extension('a/b/c/.aa.bb.cc')).toEqual(['.bb.cc', '.cc']);
done();
});

it('should return "..b" and ".b" from ".a..b"', function(done) {
expect(extension('.a..b')).toEqual(['..b', '.b']);
expect(extension('a/b/c/.a..b')).toEqual(['..b', '.b']);
done();
});
});

0 comments on commit 91bcd17

Please sign in to comment.