|
1 | 1 | var fs = require('fs');
|
| 2 | +var request=require('request'); |
2 | 3 | var jsdom = require("../../lib/jsdom");
|
3 | 4 | var fileCache = {};
|
4 |
| -var load = function(name) { |
5 |
| - var file = __dirname + "/html/files/" + name + ".html", |
6 |
| - contents = fileCache[file] || fs.readFileSync(file, 'utf8'), |
7 |
| - doc = jsdom.jsdom(null, null, {url: "file://" + file }), |
8 |
| - window = doc.createWindow(); |
9 | 5 |
|
| 6 | +var load = function(name, opts) { |
| 7 | + var opts = opts || {}, |
| 8 | + file = __dirname + "/html/files/" + name + ".html", |
| 9 | + contents = fileCache[file] || fs.readFileSync(file, 'utf8'), |
| 10 | + window, doc; |
| 11 | + |
| 12 | + if(!opts.url) { opts.url="file://" + file; } |
| 13 | + doc = jsdom.jsdom(null, null, opts), |
| 14 | + window=doc.createWindow(); |
10 | 15 | doc.parent = window;
|
11 | 16 | window.loadComplete = function() {};
|
12 | 17 |
|
@@ -19648,5 +19653,130 @@ exports.tests = {
|
19648 | 19653 | test.equal(preventDefault, false, 'preventDefault should be *false*');
|
19649 | 19654 | test.ok(performedDefault, 'performedDefault');
|
19650 | 19655 | test.done();
|
| 19656 | + }, |
| 19657 | + |
| 19658 | + HTMLImageEl01:function(test) { |
| 19659 | + test.expect(0); |
| 19660 | + var doc=load("img"); |
| 19661 | + // just a stub test, shouldn't throw any error |
| 19662 | + var imgs = doc.getElementsByTagName("img"); |
| 19663 | + imgs[0].onload=function(e) { |
| 19664 | + test.equal(false, true, "Shouldnt fire"); |
| 19665 | + } |
| 19666 | + test.done(); |
| 19667 | + }, |
| 19668 | + |
| 19669 | + HTMLImageEl02:function(test) { |
| 19670 | + test.expect(4); |
| 19671 | + /* |
| 19672 | + * |
| 19673 | + * currently no convenience method for getting remote source |
| 19674 | + * and allowing its images to load (makes sense) |
| 19675 | + * for testing, we want to allow images |
| 19676 | + * |
| 19677 | + * Setup a raw request, parse the response into a window |
| 19678 | + * |
| 19679 | + * */ |
| 19680 | + |
| 19681 | + var img_enabled={ |
| 19682 | + url:"http://nodejs.org", |
| 19683 | + features:{ |
| 19684 | + FetchExternalResources:['img'] |
| 19685 | + } |
| 19686 | + }; |
| 19687 | + |
| 19688 | + request({ |
| 19689 | + uri:"http://nodejs.org" |
| 19690 | + }, function(err, response, body) { |
| 19691 | + var window = jsdom.html( body, null, img_enabled ).createWindow(); |
| 19692 | + var has_image_feature = window.document.implementation.hasFeature('FetchExternalResources', 'img'); |
| 19693 | + test.equal(has_image_feature, true, "window mutated to read images"); |
| 19694 | + var imgs = window.document.getElementsByTagName("img"); |
| 19695 | + imgs[0].onload=function(e) { |
| 19696 | + // hrm, 'this here is the process scope' |
| 19697 | + test.equal("logo.png", e.target.src, "totally useless test"); |
| 19698 | + test.equal(Buffer.isBuffer(e.target.data), true, "Loaded image data"); |
| 19699 | + test.done(); |
| 19700 | + |
| 19701 | + } |
| 19702 | + test.equal(imgs.length>0, true, "document has images"); |
| 19703 | + |
| 19704 | + }); |
| 19705 | + }, |
| 19706 | + |
| 19707 | + HTMLImageEl03:function(test) { |
| 19708 | + test.expect(6); |
| 19709 | + var img_enabled={ |
| 19710 | + features:{ |
| 19711 | + FetchExternalResources:['img'] |
| 19712 | + } |
| 19713 | + }; |
| 19714 | + var doc=load("img", img_enabled); |
| 19715 | + var images=doc.getElementsByTagName("img"); |
| 19716 | + var img = images[0]; |
| 19717 | + test.equal(images.length>0, true, "Found images"); |
| 19718 | + test.notEqual(img.getAttribute("src"), undefined, "src is defined"); |
| 19719 | + test.equal(img.getAttribute("src"), img.src, "getAttribute value matches .src value"); |
| 19720 | + test.equal(img.src, "./pix/dts.gif", "doc img src set to original value from html"); |
| 19721 | + var img2=doc.createElement("img"); |
| 19722 | + //./pix/dts.gif |
| 19723 | + img2.src="favicon.ico"; |
| 19724 | + test.equal(img2.src, "favicon.ico", "newly created img tag src set"); |
| 19725 | + test.equal(img2.getAttribute("src"), img2.src, "getAttribute value matches .src value"); |
| 19726 | + doc.documentElement.appendChild(img2); |
| 19727 | + test.done(); |
| 19728 | + }, |
| 19729 | + |
| 19730 | + HTMLImageEl04:function(test) { |
| 19731 | + var img_enabled={ |
| 19732 | + features:{ |
| 19733 | + FetchExternalResources:['script', 'img'] |
| 19734 | + } |
| 19735 | + }; |
| 19736 | + test.expect(4); |
| 19737 | + /* JS new Image() call */ |
| 19738 | + var doc=load("img2", img_enabled); |
| 19739 | + var imgs = doc.getElementsByTagName("img"); |
| 19740 | + test.equal(typeof imgs, "object", "response from getElementsByTagName for new Image is an object"); |
| 19741 | + test.equal(typeof imgs.length, "number", "length property is a number"); |
| 19742 | + test.equal(imgs.length>0, true, "doc has a standard image tag"); |
| 19743 | + // this test calls http://localhost:8080/favicon.ico |
| 19744 | + //var images = doc.getElementsByTagName("img"); |
| 19745 | + imgs[0].onload=function() { |
| 19746 | + //console.log(this); |
| 19747 | + test.equal(Buffer.isBuffer( imgs[0].data ), true, ".data is a Buffer" ); |
| 19748 | + test.done(); |
| 19749 | + } |
| 19750 | + }, |
| 19751 | + |
| 19752 | + HTMLImageEl05:function(test) { |
| 19753 | + var img_enabled={ |
| 19754 | + features:{ |
| 19755 | + FetchExternalResources:['img'] |
| 19756 | + } |
| 19757 | + }; |
| 19758 | + var doc=load("img3", img_enabled); |
| 19759 | + // this test calls http://localhost:8080/favicon.ico |
| 19760 | + var images = doc.getElementsByTagName("img"); |
| 19761 | + test.equal(images.length>0, true, "document has appended images"); |
| 19762 | + test.done(); |
| 19763 | + }, |
| 19764 | + HTMLImageEl06:function(test) { |
| 19765 | + var img_enabled={ |
| 19766 | + features:{ |
| 19767 | + FetchExternalResources:['script', 'img'] |
| 19768 | + } |
| 19769 | + }; |
| 19770 | + var window=jsdom.jsdom(null, null, img_enabled).createWindow(); |
| 19771 | + var img = new window.Image(); |
| 19772 | + test.equal(typeof img.onload, "function", "the created image object has an onload method"); |
| 19773 | + img.onload=function() { |
| 19774 | + test.equal(Buffer.isBuffer( img.data ), true, ".data is a Buffer" ); |
| 19775 | + test.done(); |
| 19776 | + } |
| 19777 | + |
| 19778 | + img.src="http://localhost/favicon.ico"; |
| 19779 | + test.equal(img.src.length>0, true, "src property has a length"); |
| 19780 | + window.document.body.appendChild(img); |
19651 | 19781 | }
|
19652 | 19782 | }
|
0 commit comments