summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_svg_icon.js
blob: 5fd4781a1ae8545e076fa4f2581450c365122105 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

var url;
var requestHandled;

const icon =
  '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' +
  '<svg xmlns="http://www.w3.org/2000/svg" ' +
       'width="16" height="16" viewBox="0 0 16 16">' +
   '<rect x="4" y="4" width="8px" height="8px" style="fill: blue"/>' +
  '</svg>';

function run_test() {
  updateAppInfo();
  useHttpServer(); // Unused, but required to call addTestEngines.

  requestHandled = new Promise(resolve => {
    let srv = new HttpServer();
    srv.registerPathHandler("/icon.svg", (metadata, response) => {
      response.setStatusLine("1.0", 200, "OK");
      response.setHeader("Content-Type", "image/svg+xml", false);

      response.write(icon);
      resolve();
    });
    srv.start(-1);
    do_register_cleanup(() => srv.stop(() => {}));

    url = "http://localhost:" + srv.identity.primaryPort + "/icon.svg";
  });

  run_next_test();
}

add_task(function* test_svg_icon() {
  yield asyncInit();

  let [engine] = yield addTestEngines([
    { name: "SVGIcon", details: [url, "", "SVG icon", "GET",
                                 "http://icon.svg/search?q={searchTerms}"] },
  ]);

  yield requestHandled;
  yield promiseAfterCache();

  ok(engine.iconURI, "the engine has an icon");
  ok(engine.iconURI.spec.startsWith("data:image/svg+xml"),
     "the icon is saved as an SVG data url");
});