Changeset 174662 in webkit
- Timestamp:
- Oct 13, 2014 3:44:48 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r174649 r174662 1 2014-10-13 Simon Fraser <simon.fraser@apple.com> 2 3 Improve the test image diffs page 4 https://bugs.webkit.org/show_bug.cgi?id=137674 5 6 Reviewed by Alexey Proskuryakov. 7 8 New version of the image diff page that has the diff images in-place, and allows 9 for control of the image toggling. 10 11 * fast/harness/image-diff-template-expected.txt: 12 * fast/harness/image-diff-template.html: 13 1 14 2014-10-13 Simon Fraser <simon.fraser@apple.com> 2 15 -
trunk/LayoutTests/fast/harness/image-diff-template-expected.txt
r172368 r174662 1 Difference between images: diff 1 Expected Image Actual Image Diff Image 2 Animate: Expected Actual Diff 2 3 Loading... -
trunk/LayoutTests/fast/harness/image-diff-template.html
r172368 r174662 2 2 <html> 3 3 <head> 4 <title> %(title)s</title>4 <title>__TITLE__</title> 5 5 <style> 6 .label { 7 font-weight: bold; 6 .imageContainer { 7 position: absolute; 8 margin: 10px; 9 outline: 10px solid silver; 10 } 11 12 .imageContainer > img { 13 display: block; 14 } 15 16 17 .controls { 18 margin-bottom: 20px; 19 } 20 21 .controls button { 22 width: 12em; 23 } 24 25 .controls td { 26 padding: 0 10px; 27 } 28 29 .controls label { 30 font-family: -webkit-system-font; 31 font-size: 11px; 32 } 33 34 .buttons { 35 } 36 .controls > .indicator { 37 display: table-cell; 38 -webkit-column-span: 1; 39 border-top: 2px solid black; 40 } 41 42 button.selected { 43 text-decoration: underline; 8 44 } 9 45 </style> 10 46 </head> 11 47 <body> 12 Difference between images: <a href="%(diff_filename)s">diff</a><br> 13 <div class="imageText"></div> 14 <div class="imageContainer" data-prefix="%(prefix)s">Loading...</div> 48 <table class="controls"> 49 <tr> 50 <td></td> 51 <td><button id="expected-label" data-type="expected" onclick="switchToImage(this)">Expected Image</button></td> 52 <td><button id="actual-label" data-type="actual" onclick="switchToImage(this)">Actual Image</button></td> 53 <td><button id="diff-label" data-type="diff" onclick="switchToImage(this)">Diff Image</button></td> 54 </tr> 55 <tr> 56 <td><input type="checkbox" id="animate" onchange="toggleAnimate()" checked></input><label for="animate">Animate:</label></td> 57 <td><input type="checkbox" id="cycle-expected" onchange="updateImageCycle()" checked></input><label for="cycle-expected">Expected</label></td> 58 <td><input type="checkbox" id="cycle-actual" onchange="updateImageCycle()" checked></input><label for="cycle-actual">Actual</label></td> 59 <td><input type="checkbox" id="cycle-diff" onchange="updateImageCycle()"></input><label for="cycle-diff">Diff</label></td> 60 </tr> 61 </table> 62 63 <div class="imageContainer" data-prefix="__PREFIX__">Loading...</div> 15 64 <script> 16 65 if (window.testRunner) 17 66 testRunner.dumpAsText(); 18 67 19 (function() { 20 var preloadedImageCount = 0; 68 var container = document.querySelector('.imageContainer'); 21 69 22 function preloadComplete() 23 { 24 ++preloadedImageCount; 25 if (preloadedImageCount < 2) 26 return; 27 toggleImages(); 28 setInterval(toggleImages, 2000) 70 var data = { 71 'expected' : { 72 'image' : preloadImage(container.getAttribute('data-prefix') + '-expected.png'), 73 'label' : document.getElementById('expected-label'), 74 }, 75 'actual' : { 76 'image' : preloadImage(container.getAttribute('data-prefix') + '-actual.png'), 77 'label' : document.getElementById('actual-label'), 78 }, 79 'diff' : { 80 'image' : preloadImage(container.getAttribute('data-prefix') + '-diff.png'), 81 'label' : document.getElementById('diff-label'), 82 }, 83 }; 84 85 var preloadedImageCount = 0; 86 87 function preloadComplete() 88 { 89 ++preloadedImageCount; 90 if (preloadedImageCount < 3) 91 return; 92 93 showImage(data['actual']); 94 updateImageCycle(); 95 startCyclingImages(); 96 } 97 98 function preloadImage(url) 99 { 100 image = new Image(); 101 image.addEventListener('load', preloadComplete); 102 image.src = url; 103 return image; 104 } 105 106 function switchToImage(element) 107 { 108 var imageType = element.getAttribute('data-type'); 109 showImage(data[imageType]); 110 } 111 112 function resetLabels() 113 { 114 for (var item in data) 115 data[item].label.classList.remove('selected'); 116 } 117 118 function showImage(categoryData) 119 { 120 container.replaceChild(categoryData.image, container.firstChild); 121 122 resetLabels(); 123 categoryData.label.classList.add('selected'); 124 } 125 126 function updateImageCycle() 127 { 128 data.expected.cycle = document.getElementById('cycle-expected').checked; 129 data.actual.cycle = document.getElementById('cycle-actual').checked; 130 data.diff.cycle = document.getElementById('cycle-diff').checked; 131 } 132 133 function getCurrentlyShowingImageType() 134 { 135 for (var item in data) { 136 if (data[item].label.classList.contains('selected')) 137 return item; 29 138 } 139 } 30 140 31 function preloadImage(url) 32 { 33 image = new Image(); 34 image.addEventListener('load', preloadComplete); 35 image.src = url; 36 return image; 141 function toggleAnimate() 142 { 143 if (document.getElementById('animate').checked) 144 startCyclingImages(); 145 else 146 stopCyclingImages(); 147 } 148 149 var cycleIntervalID; 150 function startCyclingImages() 151 { 152 stopCyclingImages(); 153 cycleIntervalID = window.setInterval(cycleImages, 2000); 154 } 155 156 function stopCyclingImages() 157 { 158 if (cycleIntervalID) { 159 window.clearInterval(cycleIntervalID); 160 cycleIntervalID = undefined; 37 161 } 162 } 38 163 39 function toggleImages() 40 { 41 if (text.textContent == 'Expected Image') { 42 text.textContent = 'Actual Image'; 43 container.replaceChild(actualImage, container.firstChild); 44 } else { 45 text.textContent = 'Expected Image'; 46 container.replaceChild(expectedImage, container.firstChild); 47 } 48 } 164 function cycleImages() 165 { 166 var currentImage = getCurrentlyShowingImageType(); 167 var order = ['expected', 'actual', 'diff']; 168 var index = order.indexOf(currentImage); 169 170 var currIndex = (index + 1) % order.length; 171 do { 172 var type = order[currIndex]; 173 if (data[type].cycle) 174 break; 175 176 currIndex = (currIndex + 1) % order.length; 177 } while (currIndex != index); 49 178 50 var text = document.querySelector('.imageText'); 51 var container = document.querySelector('.imageContainer'); 52 var actualImage = preloadImage(container.getAttribute('data-prefix') + '-actual.png'); 53 var expectedImage = preloadImage(container.getAttribute('data-prefix') + '-expected.png'); 54 })(); 179 showImage(data[order[currIndex]]); 180 } 55 181 </script> 56 182 </body> -
trunk/Tools/ChangeLog
r174656 r174662 1 2014-10-13 Simon Fraser <simon.fraser@apple.com> 2 3 Improve the test image diffs page 4 https://bugs.webkit.org/show_bug.cgi?id=137674 5 6 Reviewed by Alexey Proskuryakov. 7 8 Don't treat the input file as a format string, otherwise we have to escape special 9 characters. Just do a couple of replaces. 10 11 * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py: 12 (TestResultWriter.write_image_diff_files): 13 1 14 2014-10-13 Carlos Alberto Lopez Perez <clopez@igalia.com> 2 15 -
trunk/Tools/Scripts/webkitpy/layout_tests/controllers/test_result_writer.py
r172370 r174662 176 176 image_diff_file = self._filesystem.read_text_file(image_diff_template) 177 177 178 # FIXME: old-run-webkit-tests shows the diff percentage as the text contents of the "diff" link. 179 # FIXME: old-run-webkit-tests include a link to the test file. 180 html = image_diff_file % { 181 'title': self._test_name, 182 'diff_filename': self._output_testname(self.FILENAME_SUFFIX_IMAGE_DIFF), 183 'prefix': self._output_testname(''), 184 } 178 html = image_diff_file.replace('__TITLE__', self._test_name); 179 html = html.replace('__PREFIX__', self._output_testname('')); 185 180 186 181 diffs_html_filename = self.output_filename(self.FILENAME_SUFFIX_IMAGE_DIFFS_HTML)
Note: See TracChangeset
for help on using the changeset viewer.