Thu, 15 Jan 2015 15:55:04 +0100
Back out 97036ab72558 which inappropriately compared turds to third parties.
1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <title>Test for CameraParameters we need to fake</title>
5 <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
6 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
7 <script type="text/javascript" src="camera_common.js"></script>
8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
9 </head>
10 <body>
11 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=976802">Mozilla Bug 976802</a>
12 <video id="viewfinder" width="200" height="200" autoplay></video>
13 <img src="#" alt="This image is going to load" id="testimage"/>
15 <script class="testbody" type="text/javascript;version=1.7">
17 var whichCamera = navigator.mozCameras.getListOfCameras()[0];
18 var initialConfig = {
19 mode: 'picture',
20 recorderProfile: 'cif',
21 previewSize: {
22 width: 352,
23 height: 288
24 }
25 };
27 var cameraObj = null;
29 // Shorthand functions
30 function onError(e) {
31 ok(false, "Error" + JSON.stringify(e));
32 }
34 function end() {
35 CameraTest.end();
36 }
37 function next() {
38 if (cameraObj) {
39 cameraObj.release(
40 function success() {
41 CameraTest.next();
42 },
43 onError
44 );
45 cameraObj = null;
46 } else {
47 CameraTest.next();
48 }
49 }
50 function run() {
51 CameraTest.run();
52 }
54 // The array of tests. Because camera capabilities don't change over the life
55 // of a CameraControl object, they are only read once when the CameraControl is
56 // created; so we have to call the 'prep' function first to set the fake
57 // capability pref, before we call getCamera() and call 'test' to run the test.
58 var tests = [
59 {
60 key: "fake-zoom",
61 prep: function setupFakeZoom(test) {
62 test.setFakeParameters("zoom-ratios=100,150,200,300,400;max-zoom=4", function() {
63 run();
64 });
65 },
66 test: function testFakeZoom(cam, cap) {
67 ok(cap.zoomRatios.length == 5, "zoom ratios length = " + cap.zoomRatios.length);
69 // test individual zoom ratios
70 cap.zoomRatios.forEach(function(zoom, index) {
71 cam.zoom = zoom;
72 ok(cam.zoom === zoom,
73 "zoom[" + index + "] = " + zoom + "x, cam.zoom = " + cam.zoom + "x");
74 });
76 // test below-lower-bound zoom ratio
77 var zoom = cap.zoomRatios[0] - 0.1;
78 cam.zoom = zoom;
79 ok(cam.zoom === cap.zoomRatios[0],
80 zoom + "x zoom clamps to minimum: " +
81 cap.zoomRatios[0] + "x, cam.zoom = " + cam.zoom + "x");
83 // test above-upper-bound zoom ratio
84 zoom = cap.zoomRatios.slice(-1)[0] + 1.0;
85 cam.zoom = zoom;
86 ok(cam.zoom === cap.zoomRatios.slice(-1)[0],
87 zoom + "x zoom clamps to maximum: " + cap.zoomRatios.slice(-1)[0] +
88 "x, cam.zoom = " + cam.zoom + "x");
90 // test snapping to supported zoom ratio
91 if (cap.zoomRatios.length > 1) {
92 zoom = (cap.zoomRatios[0] + cap.zoomRatios[1]) / 2;
93 cam.zoom = zoom;
94 ok(cam.zoom === cap.zoomRatios[0],
95 zoom + "x zoom rounded down to: " + cap.zoomRatios[0] +
96 "x, cam.zoom = " + cam.zoom + "x");
97 }
99 next();
100 }
101 },
102 {
103 key: "fake-zoom-out-of-order",
104 prep: function setupFakeZoomOutOfOrder(test) {
105 // We expect the camera library to give us zoom ratios in order; if
106 // it doesn't we ignore the list and just return 1x support.
107 test.setFakeParameters("zoom-ratios=100,150,200,400,300;max-zoom=4", function () {
108 run();
109 });
110 },
111 test: function testFakeZoomOutOfOrder(cam, cap) {
112 ok(cap.zoomRatios.length == 1, "zoom ratios length = " + cap.zoomRatios.length);
113 ok(cap.zoomRatios[0] == 1.0, "only supported zoom = " + cap.zoomRatios[0] + "x");
114 next();
115 }
116 },
117 {
118 key: "fake-iso",
119 prep: function setupFakeIso(test) {
120 // we should recognize 'auto', 'hjr', and numeric modes; anything else
121 // from the driver is ignored, which this test also verifies.
122 test.setFakeParameters(
123 "iso=auto;iso-values=auto,ISO_HJR,ISO100,foo,ISObar,ISO200,ISO400,ISO800,ISO1600",
124 function () {
125 run();
126 });
127 },
128 test: function testFakeIso(cam, cap) {
129 // values 'foo' and 'ISObar' should not be included in isoModes
130 ok(cap.isoModes.length == 7, "ISO modes length = " + cap.isoModes.length);
131 ok(cap.isoModes.indexOf("foo") == -1, "Unknown ISO mode 'foo' is ignored");
132 ok(cap.isoModes.indexOf("ISObar") == -1, "Unknown ISO mode 'ISObar' is ignored");
133 ok(cap.isoModes.indexOf("bar") == -1, "Unknown ISO mode 'bar' is ignored");
135 // test individual ISO modes
136 cap.isoModes.forEach(function(iso, index) {
137 cam.iso = iso;
138 ok(cam.iso === iso,
139 "ISO[" + index + "] = " + iso + ", cam.iso = " + cam.iso);
140 });
142 next();
143 }
144 },
145 ];
147 var testGenerator = function() {
148 for (var i = 0; i < tests.length; ++i ) {
149 yield tests[i];
150 }
151 }();
153 window.addEventListener('beforeunload', function() {
154 document.getElementById('viewfinder').mozSrcObject = null;
155 if (cameraObj) {
156 cameraObj.release();
157 cameraObj = null;
158 }
159 });
161 CameraTest.begin("hardware", function(test) {
162 function onError(error) {
163 ok(false, "getCamera() failed with: " + error);
164 end();
165 }
167 CameraTest.next = function() {
168 try {
169 var t = testGenerator.next();
170 info("test: " + t.key);
171 function onSuccess(camera, config) {
172 cameraObj = camera;
173 document.getElementById('viewfinder').mozSrcObject = camera;
174 camera.onPreviewStateChange = function (state) {
175 if (state === "started") {
176 t.test(camera, camera.capabilities);
177 } else {
178 ok(false, "preview started (state = '" + state + "')");
179 }
180 camera.onPreviewStateChange = null;
181 };
182 }
183 CameraTest.run = function() {
184 navigator.mozCameras.getCamera(whichCamera, initialConfig, onSuccess, onError);
185 };
186 t.prep(test);
187 } catch(e) {
188 if (e instanceof StopIteration) {
189 end();
190 } else {
191 throw e;
192 }
193 }
194 };
195 next();
196 });
198 </script>
199 </body>
201 </html>