Index: chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js |
diff --git a/chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js b/chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js |
index 2a6020a40b8c284a814a1fc2800d625c0328f6c2..68a80d8a349f54c925e7e4e7bde60beae82ddb78 100644 |
--- a/chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js |
+++ b/chrome/test/data/extensions/api_test/tabs/capture_visible_tab/test.js |
@@ -9,17 +9,17 @@ var kWidth = 400; |
var kHeight = 400; |
function pageUrl(base) { |
- return chrome.extension.getURL(base + ".html"); |
+ return chrome.extension.getURL(base + '.html'); |
} |
-function testAllPixelsAreExpectedColor(imgUrl, color) { |
- assertEq("string", typeof(imgUrl)); |
+function getAllPixels(imgUrl, callbackFn) { |
+ assertEq('string', typeof(imgUrl)); |
var img = new Image(); |
img.width = kWidth; |
img.height = kHeight; |
img.src = imgUrl; |
img.onload = pass(function() { |
- var canvas = document.createElement("canvas"); |
+ var canvas = document.createElement('canvas'); |
// Comparing pixels is slow enough to hit timeouts. Compare |
// a 10x10 region. |
@@ -30,20 +30,48 @@ function testAllPixelsAreExpectedColor(imgUrl, color) { |
var imageData = context.getImageData(1, 1, 9, 9).data; |
- var badPixels = []; |
- |
+ var pixelColors = []; |
for (var i = 0, n = imageData.length; i < n; i += 4) { |
- if (color[0] != imageData[i+0] || |
- color[1] != imageData[i+1] || |
- color[2] != imageData[i+2] || |
- color[3] != imageData[i+3] ) { |
- badPixels.push({"i": i, |
- "color": [imageData[i+0], imageData[i+1], |
- imageData[i+2], imageData[i+3]] |
+ pixelColors.push([imageData[i+0], |
+ imageData[i+1], |
+ imageData[i+2], |
+ imageData[i+3]].join(',')); |
+ } |
+ |
+ callbackFn(pixelColors); |
+ }); |
+} |
+ |
+function testAllPixelsAreExpectedColor(imgUrl, expectedColor) { |
+ getAllPixels(imgUrl, function(pixelColors) { |
+ var badPixels = []; |
+ for (var i = 0, ie = pixelColors.length; i < ie; ++i) { |
+ if (pixelColors[i] != expectedColor) { |
+ badPixels.push({'i': i, |
+ 'color': pixelColors[i] |
}); |
} |
} |
- assertEq("[]", JSON.stringify(badPixels, null, 2)) |
+ assertEq('[]', JSON.stringify(badPixels, null, 2)); |
+ }); |
+} |
+ |
+// Build a count of the number of times the colors in |
+// |expectedColors| occur in the image at |imgUrl|. |
+function countPixelsWithColors(imgUrl, expectedColors, callback) { |
+ colorCounts = new Array(expectedColors.length); |
+ for (var i = 0; i < expectedColors.length; ++i) { |
+ colorCounts[i] = 0; |
+ } |
+ |
+ getAllPixels(imgUrl, function(pixelColors) { |
+ for (var i = 0, ie = pixelColors.length; i < ie; ++i) { |
+ var colorIdx = expectedColors.indexOf(pixelColors[i]); |
+ if (colorIdx != -1) |
+ colorCounts[colorIdx]++; |
+ } |
+ callback(colorCounts, // Mapping from color to # pixels. |
+ pixelColors.length); // Total pixels examined. |
}); |
} |
@@ -55,19 +83,19 @@ chrome.test.runTests([ |
// Open a window with one tab, take a snapshot. |
function captureVisibleTabWhiteImage() { |
// Keep the resulting image small by making the window small. |
- createWindow([pageUrl("white")], {"width": kWidth, "height": kHeight}, |
+ createWindow([pageUrl('white')], {'width': kWidth, 'height': kHeight}, |
pass(function(winId, tabIds) { |
waitForAllTabs(pass(function() { |
chrome.tabs.getSelected(winId, pass(function(tab) { |
assertEq('complete', tab.status); // waitForAllTabs ensures this. |
chrome.tabs.captureVisibleTab(winId, pass(function(imgDataUrl) { |
// The URL should be a data URL with has a JPEG mime type. |
- assertEq("string", typeof(imgDataUrl)); |
+ assertEq('string', typeof(imgDataUrl)); |
assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22)); |
whiteImageUrl = imgDataUrl; |
testAllPixelsAreExpectedColor(whiteImageUrl, |
- [255, 255, 255, 255]); // White. |
+ '255,255,255,255'); // White. |
})); |
})); |
})); |
@@ -76,14 +104,14 @@ chrome.test.runTests([ |
function captureVisibleTabBlackImage() { |
// Keep the resulting image small by making the window small. |
- createWindow([pageUrl("black")], {"width": kWidth, "height": kHeight}, |
+ createWindow([pageUrl('black')], {'width': kWidth, 'height': kHeight}, |
pass(function(winId, tabIds) { |
waitForAllTabs(pass(function() { |
chrome.tabs.getSelected(winId, pass(function(tab) { |
assertEq('complete', tab.status); // waitForAllTabs ensures this. |
chrome.tabs.captureVisibleTab(winId, pass(function(imgDataUrl) { |
// The URL should be a data URL with has a JPEG mime type. |
- assertEq("string", typeof(imgDataUrl)); |
+ assertEq('string', typeof(imgDataUrl)); |
assertEq('data:image/jpg;base64,', imgDataUrl.substr(0,22)); |
blackImageUrl = imgDataUrl; |
@@ -93,31 +121,40 @@ chrome.test.runTests([ |
assertTrue(whiteImageUrl != blackImageUrl); |
testAllPixelsAreExpectedColor(blackImageUrl, |
- [0, 0, 0, 255]); // Black. |
+ '0,0,0,255'); // Black. |
})); |
})); |
})); |
})); |
}, |
- function captureVisibleTabRedPng() { |
+ function captureVisibleTabText() { |
// Keep the resulting image small by making the window small. |
- createWindow([pageUrl("red")], {"width": kWidth, "height": kHeight}, |
+ createWindow([pageUrl('text')], {'width': kWidth, 'height': kHeight}, |
pass(function(winId, tabIds) { |
waitForAllTabs(pass(function() { |
chrome.tabs.getSelected(winId, pass(function(tab) { |
assertEq('complete', tab.status); // waitForAllTabs ensures this. |
chrome.tabs.captureVisibleTab(winId, |
- {"format": "png"}, |
+ {'format': 'png'}, |
pass(function(imgDataUrl) { |
// The URL should be a data URL with has a PNG mime type. |
- assertEq("string", typeof(imgDataUrl)); |
+ assertEq('string', typeof(imgDataUrl)); |
assertEq('data:image/png;base64,', imgDataUrl.substr(0,22)); |
- // TODO(skerner): The pixel comparison test fails on XP. |
- // Find out why. |
- //testAllPixelsAreExpectedColor(imgDataUrl, |
- // [255, 0, 0, 255]); // Red. |
+ countPixelsWithColors( |
+ imgDataUrl, |
+ ['255,255,255,255'], |
+ pass(function(colorCounts, totalPixelsChecked) { |
+ // Some pixels should not be white, because the text |
+ // is not white. Can't test for black because |
+ // antialiasing makes the pixels slightly different |
+ // on each display setting. |
+ |
+ // chrome.test.log(totalPixelsChecked); |
+ // chrome.test.log(colorCounts[0]); |
+ assertTrue(totalPixelsChecked != colorCounts[0]); |
+ })); |
})); |
})); |
})); |