diff --git a/lib/application.js b/lib/application.js index 47be2a20c1a..c5b97d26374 100644 --- a/lib/application.js +++ b/lib/application.js @@ -301,8 +301,9 @@ app.engine = function engine(ext, fn) { ? '.' + ext : ext; - // store engine - this.engines[extension] = fn; + // store engine, normalizing extension to lowercase for + // case-insensitive matching with file extensions + this.engines[extension.toLowerCase()] = fn; return this; }; diff --git a/lib/view.js b/lib/view.js index d66b4a2d89c..3c29b3b462e 100644 --- a/lib/view.js +++ b/lib/view.js @@ -53,7 +53,7 @@ function View(name, options) { var opts = options || {}; this.defaultEngine = opts.defaultEngine; - this.ext = extname(name); + this.ext = extname(name).toLowerCase(); this.name = name; this.root = opts.root; @@ -65,9 +65,9 @@ function View(name, options) { if (!this.ext) { // get extension from default engine name - this.ext = this.defaultEngine[0] !== '.' + this.ext = (this.defaultEngine[0] !== '.' ? '.' + this.defaultEngine - : this.defaultEngine; + : this.defaultEngine).toLowerCase(); fileName += this.ext; } diff --git a/test/app.engine.js b/test/app.engine.js index b0553aa247e..775ca846437 100644 --- a/test/app.engine.js +++ b/test/app.engine.js @@ -79,5 +79,34 @@ describe('app', function(){ done(); }) }) + + it('should match engine registered with uppercase ext to lowercase file', function(done){ + var app = express(); + + app.set('views', path.join(__dirname, 'fixtures')) + app.engine('HTML', render); + app.locals.user = { name: 'tobi' }; + + app.render('user.html', function(err, str){ + if (err) return done(err); + assert.strictEqual(str, '

tobi

') + done(); + }) + }) + + it('should match engine registered with mixed case ext', function(done){ + var app = express(); + + app.set('views', path.join(__dirname, 'fixtures')) + app.engine('Html', render); + app.set('view engine', 'Html'); + app.locals.user = { name: 'tobi' }; + + app.render('user', function(err, str){ + if (err) return done(err); + assert.strictEqual(str, '

tobi

') + done(); + }) + }) }) })