Skip to content

Commit a74927d

Browse files
Mark Lagendijks0ph1e
authored andcommitted
Fixed css handler deadlock. (#82)
* Fixed css handler deadlock. * Fix test command to also work on Windows, see gotwarlost/istanbul#90 (comment) * Updated test
1 parent 60643e0 commit a74927d

File tree

3 files changed

+26
-23
lines changed

3 files changed

+26
-23
lines changed

lib/file-handlers/css.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@ function loadCss (context, resource) {
2323
var childUrl = utils.getUrl(url, cssUrl);
2424
var childResource = resource.createChild(childUrl);
2525

26-
return context.loadResource(childResource).then(function handleLoadedSource (loadedResource) {
27-
if(loadedResource){
28-
resource.updateChild(childResource, loadedResource);
26+
return context.requestResource(childResource).then(function handleLoadedSource (respondedResource) {
27+
if(respondedResource){
28+
resource.updateChild(childResource, respondedResource);
2929

30-
var relativePath = utils.getRelativePath(filename, loadedResource.getFilename());
30+
var relativePath = utils.getRelativePath(filename, respondedResource.getFilename());
3131
text = changeExactlyMatchedUrl(text, cssUrl, relativePath);
32+
33+
context.loadResource(respondedResource);
3234
}
35+
return null;
3336
});
3437
});
3538

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"readmeFilename": "README.md",
66
"main": "index.js",
77
"scripts": {
8-
"test": "istanbul cover _mocha --dir ./coverage --report lcov -- -R spec --recursive --timeout 7000 ./test && npm run eslint",
8+
"test": "istanbul cover node_modules/mocha/bin/_mocha --dir ./coverage --report lcov -- -R spec --recursive --timeout 7000 ./test && npm run eslint",
99
"eslint": "eslint lib/** index.js"
1010
},
1111
"repository": {

test/unit/file-handlers/css-test.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,33 @@ describe('Css handler', function () {
2020

2121
describe('#loadCss(context, resource)', function() {
2222

23-
it('should not call loadResource if no sources in css', function(done) {
24-
var loadResourceSpy = sinon.stub(scraper, 'loadResource');
23+
it('should not call requestResource if no sources in css', function(done) {
24+
var requestResourceStub = sinon.stub(scraper, 'requestResource');
2525

2626
var po = new Resource('http://example.com', '1.css');
2727
po.setText('');
2828

2929
loadCss(scraper, po).then(function() {
30-
loadResourceSpy.called.should.be.eql(false);
30+
requestResourceStub.called.should.be.eql(false);
3131
done();
3232
}).catch(done);
3333
});
3434

35-
it('should call loadResource once with correct params', function(done) {
36-
var loadResourceSpy = sinon.stub(scraper, 'loadResource').resolves();
35+
it('should call requestResource once with correct params', function(done) {
36+
var requestResourceStub = sinon.stub(scraper, 'requestResource').resolves();
3737

3838
var po = new Resource('http://example.com', '1.css');
3939
po.setText('div {background: url(test.png)}');
4040

4141
loadCss(scraper, po).then(function() {
42-
loadResourceSpy.calledOnce.should.be.eql(true);
43-
loadResourceSpy.args[0][0].url.should.be.eql('http://example.com/test.png');
42+
requestResourceStub.calledOnce.should.be.eql(true);
43+
requestResourceStub.args[0][0].url.should.be.eql('http://example.com/test.png');
4444
done();
4545
}).catch(done);
4646
});
4747

48-
it('should call loadResource for each found source with correct params', function(done) {
49-
var loadResourceSpy = sinon.stub(scraper, 'loadResource').resolves();
48+
it('should call requestResource for each found source with correct params', function(done) {
49+
var requestResourceStub = sinon.stub(scraper, 'requestResource').resolves();
5050
var css = '\
5151
.a {background: url(a.jpg)} \
5252
.b {background: url(\'b.jpg\')}\
@@ -57,16 +57,16 @@ describe('Css handler', function () {
5757
po.setText(css);
5858

5959
loadCss(scraper, po).then(function() {
60-
loadResourceSpy.calledThrice.should.be.eql(true);
61-
loadResourceSpy.args[0][0].url.should.be.eql('http://example.com/a.jpg');
62-
loadResourceSpy.args[1][0].url.should.be.eql('http://example.com/b.jpg');
63-
loadResourceSpy.args[2][0].url.should.be.eql('http://example.com/c.jpg');
60+
requestResourceStub.calledThrice.should.be.eql(true);
61+
requestResourceStub.args[0][0].url.should.be.eql('http://example.com/a.jpg');
62+
requestResourceStub.args[1][0].url.should.be.eql('http://example.com/b.jpg');
63+
requestResourceStub.args[2][0].url.should.be.eql('http://example.com/c.jpg');
6464
done();
6565
}).catch(done);
6666
});
6767

6868
it('should replace all sources in text with local files', function(done) {
69-
var loadStub = sinon.stub(scraper, 'loadResource');
69+
var loadStub = sinon.stub(scraper, 'requestResource');
7070
loadStub.onFirstCall().resolves(new Resource('http://first.com/img/a.jpg', 'local/a.jpg'));
7171
loadStub.onSecondCall().resolves(new Resource('http://first.com/b.jpg', 'local/b.jpg'));
7272
loadStub.onThirdCall().resolves(new Resource('http://second.com/img/c.jpg', 'local/c.jpg'));
@@ -95,8 +95,8 @@ describe('Css handler', function () {
9595
}).catch(done);
9696
});
9797

98-
it('should not replace the sources in text, for which loadResource returned null', function(done) {
99-
var loadStub = sinon.stub(scraper, 'loadResource');
98+
it('should not replace the sources in text, for which requestResource returned null', function(done) {
99+
var loadStub = sinon.stub(scraper, 'requestResource');
100100
loadStub.onFirstCall().resolves(null);
101101
loadStub.onSecondCall().resolves(null);
102102
loadStub.onThirdCall().resolves(new Resource('http://second.com/img/c.jpg', 'local/c.jpg'));
@@ -128,7 +128,7 @@ describe('Css handler', function () {
128128
});
129129

130130
it('should replace all occurencies of the same sources in text with local files', function(done) {
131-
sinon.stub(scraper, 'loadResource').resolves(new Resource('http://example.com/img.jpg', 'local/img.jpg'));
131+
sinon.stub(scraper, 'requestResource').resolves(new Resource('http://example.com/img.jpg', 'local/img.jpg'));
132132

133133
var css = '\
134134
.a {background: url("http://example.com/img.jpg")} \
@@ -156,7 +156,7 @@ describe('Css handler', function () {
156156

157157
// Order of args for calling loadStub depends on order of css urls
158158
// first time it will be called with cssUrls[0], second time -> cssUrls[1]
159-
var loadStub = sinon.stub(scraper, 'loadResource');
159+
var loadStub = sinon.stub(scraper, 'requestResource');
160160
loadStub.onCall(0).resolves(new Resource('http://example.com/style.css', 'local/style.css'));
161161
loadStub.onCall(1).resolves(new Resource('http://example.com/mystyle.css', 'local/mystyle.css'));
162162
loadStub.onCall(2).resolves(new Resource('http://example.com/another_style.css', 'local/another_style.css'));

0 commit comments

Comments
 (0)