Skip to content

Commit

Permalink
Merge pull request #1877 from xzyfer/preserve-cwd-include-path
Browse files Browse the repository at this point in the history
Restore behaviour of cwd in include path
  • Loading branch information
xzyfer committed Jan 31, 2017
2 parents 4271c70 + 203f8d6 commit c048687
Show file tree
Hide file tree
Showing 5 changed files with 180 additions and 15 deletions.
5 changes: 5 additions & 0 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,11 @@ function buildIncludePaths(options) {
);
}

// Preserve the behaviour people have come to expect.
// This behaviour was removed from Sass in 3.4 and
// LibSass in 3.5.
options.includePaths.unshift(process.cwd());

return options.includePaths.join(path.delimiter);
}

Expand Down
184 changes: 169 additions & 15 deletions test/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,19 @@ describe('api', function() {
});
});

it('should compile sass to css using indented syntax', function(done) {
var src = read(fixture('indent/index.sass'), 'utf8');
var expected = read(fixture('indent/expected.css'), 'utf8').trim();

sass.render({
data: src,
indentedSyntax: true
}, function(error, result) {
assert.equal(result.css.toString().trim(), expected.replace(/\r\n/g, '\n'));
done();
});
});

it('should NOT compile empty data string', function(done) {
sass.render({
data: ''
Expand All @@ -96,27 +109,14 @@ describe('api', function() {
});
});

it('should NOT compile without parameters', function(done) {
it('should NOT compile without any input', function(done) {
sass.render({ }, function(error) {
assert.equal(error.message, 'No input specified: provide a file name or a source string to process');
done();
});
});

it('should compile sass to css using indented syntax', function(done) {
var src = read(fixture('indent/index.sass'), 'utf8');
var expected = read(fixture('indent/expected.css'), 'utf8').trim();

sass.render({
data: src,
indentedSyntax: true
}, function(error, result) {
assert.equal(result.css.toString().trim(), expected.replace(/\r\n/g, '\n'));
done();
});
});

it('should throw error status 1 for bad input', function(done) {
it('should returnn error status 1 for bad input', function(done) {
sass.render({
data: '#navbar width 80%;'
}, function(error) {
Expand All @@ -142,6 +142,23 @@ describe('api', function() {
});
});

it('should add cwd to the front on include paths', function(done) {
var src = fixture('cwd-include-path/root/index.scss');
var expected = read(fixture('cwd-include-path/expected.css'), 'utf8').trim();
var cwd = process.cwd();

process.chdir(fixture('cwd-include-path'));
sass.render({
file: src,
includePaths: []
}, function(error, result) {
assert.equal(result.css.toString().trim(), expected.replace(/\r\n/g, '\n'));

process.chdir(cwd);
done();
});
});

it('should check SASS_PATH in the specified order', function(done) {
var src = read(fixture('sass-path/index.scss'), 'utf8');
var expectedRed = read(fixture('sass-path/expected-red.css'), 'utf8').trim();
Expand Down Expand Up @@ -1389,6 +1406,143 @@ describe('api', function() {

done();
});

it('should compile with include paths', function(done) {
var src = read(fixture('include-path/index.scss'), 'utf8');
var expected = read(fixture('include-path/expected.css'), 'utf8').trim();
var result = sass.renderSync({
data: src,
includePaths: [
fixture('include-path/functions'),
fixture('include-path/lib')
]
});

assert.equal(result.css.toString().trim(), expected.replace(/\r\n/g, '\n'));
done();
});

it('should add cwd to the front on include paths', function(done) {
var src = fixture('cwd-include-path/root/index.scss');
var expected = read(fixture('cwd-include-path/expected.css'), 'utf8').trim();
var cwd = process.cwd();

process.chdir(fixture('cwd-include-path'));
var result = sass.renderSync({
file: src,
includePaths: [
fixture('include-path/functions'),
fixture('include-path/lib')
]
});
process.chdir(cwd);

assert.equal(result.css.toString().trim(), expected.replace(/\r\n/g, '\n'));
done();
});

it('should check SASS_PATH in the specified order', function(done) {
var src = read(fixture('sass-path/index.scss'), 'utf8');
var expectedRed = read(fixture('sass-path/expected-red.css'), 'utf8').trim();
var expectedOrange = read(fixture('sass-path/expected-orange.css'), 'utf8').trim();

var envIncludes = [
fixture('sass-path/red'),
fixture('sass-path/orange')
];

process.env.SASS_PATH = envIncludes.join(path.delimiter);
var result = sass.renderSync({
data: src,
includePaths: []
});

assert.equal(result.css.toString().trim(), expectedRed.replace(/\r\n/g, '\n'));

process.env.SASS_PATH = envIncludes.reverse().join(path.delimiter);
result = sass.renderSync({
data: src,
includePaths: []
});

assert.equal(result.css.toString().trim(), expectedOrange.replace(/\r\n/g, '\n'));
done();
});

it('should prefer include path over SASS_PATH', function(done) {
var src = read(fixture('sass-path/index.scss'), 'utf8');
var expectedRed = read(fixture('sass-path/expected-red.css'), 'utf8').trim();
var expectedOrange = read(fixture('sass-path/expected-orange.css'), 'utf8').trim();

var envIncludes = [
fixture('sass-path/red')
];
process.env.SASS_PATH = envIncludes.join(path.delimiter);

var result = sass.renderSync({
data: src,
includePaths: []
});

assert.equal(result.css.toString().trim(), expectedRed.replace(/\r\n/g, '\n'));

result = sass.renderSync({
data: src,
includePaths: [fixture('sass-path/orange')]
});

assert.equal(result.css.toString().trim(), expectedOrange.replace(/\r\n/g, '\n'));
done();
});

it('should render with precision option', function(done) {
var src = read(fixture('precision/index.scss'), 'utf8');
var expected = read(fixture('precision/expected.css'), 'utf8').trim();
var result = sass.renderSync({
data: src,
precision: 10
});

assert.equal(result.css.toString().trim(), expected.replace(/\r\n/g, '\n'));
done();
});

it('should contain all included files in stats when data is passed', function(done) {
var src = read(fixture('include-files/index.scss'), 'utf8');
var expected = [
fixture('include-files/bar.scss').replace(/\\/g, '/'),
fixture('include-files/foo.scss').replace(/\\/g, '/')
];

var result = sass.renderSync({
data: src,
includePaths: [fixture('include-files')]
});

assert.deepEqual(result.stats.includedFiles, expected);
done();
});

it('should render with indentWidth and indentType options', function(done) {
var result = sass.renderSync({
data: 'div { color: transparent; }',
indentWidth: 7,
indentType: 'tab'
});

assert.equal(result.css.toString().trim(), 'div {\n\t\t\t\t\t\t\tcolor: transparent; }');
done();
});

it('should render with linefeed option', function(done) {
var result = sass.renderSync({
data: 'div { color: transparent; }',
linefeed: 'lfcr'
});

assert.equal(result.css.toString().trim(), 'div {\n\r color: transparent; }');
done();
});
});

describe('.renderSync(importer)', function() {
Expand Down
2 changes: 2 additions & 0 deletions test/fixtures/cwd-include-path/expected.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.outside {
color: red; }
3 changes: 3 additions & 0 deletions test/fixtures/cwd-include-path/outside.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.outside {
color: red;
}
1 change: 1 addition & 0 deletions test/fixtures/cwd-include-path/root/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@import 'outside';

0 comments on commit c048687

Please sign in to comment.