blob: fbd55682590098a9d24341f2b819fd6d97e7aaf9 [file] [log] [blame]
Andrew Top61a84952019-04-30 15:07:33 -07001// grab test metadata from a test file
2function __result_handler() {
3
4 function __get_metadata() {
5 var obj = new Object();
6 var author = [];
7 var assert = [];
8 var help = [];
9 var match = [];
10 var mismatch = [];
11 var flags = [];
12 var nodes;
13
14 nodes = document.querySelectorAll('link[rel="author"]');
15 for (var i = 0; i < nodes.length; i++) {
16 var href = nodes[i].getAttribute("href");
17 var title = nodes[i].getAttribute("title");
18 var s = title;
19 if (href != null) {
20 s += " <" + href + ">";
21 }
22 author.push(s);
23 }
24 if (nodes.length > 0) obj.author = author;
25 nodes = document.querySelectorAll('meta[name="assert"]');
26 for (var i = 0; i < nodes.length; i++) {
27 assert.push(nodes[i].getAttribute("content"));
28 }
29 if (nodes.length > 0) obj.assert = assert;
30 nodes = document.querySelectorAll('link[rel="help"]');
31 for (var i = 0; i < nodes.length; i++) {
32 help.push(nodes[i].getAttribute("href"));
33 }
34 if (nodes.length > 0) obj.help = help;
35 nodes = document.querySelectorAll('link[rel="match"]');
36 for (var i = 0; i < nodes.length; i++) {
37 match.push(nodes[i].getAttribute("href"));
38 }
39 if (nodes.length > 0) obj.match = match;
40 nodes = document.querySelectorAll('link[rel="mismatch"]');
41 for (var i = 0; i < nodes.length; i++) {
42 mismatch.push(nodes[i].getAttribute("href"));
43 }
44 if (nodes.length > 0) obj.match = mismatch;
45 nodes = document.querySelectorAll('meta[name="flags"]');
46 for (var i = 0; i < nodes.length; i++) {
47 flags.push(nodes[i].getAttribute("content"));
48 }
49 if (nodes.length > 0) obj.flags = flags;
50
51 return obj;
52 }
53
54 var meta = __get_metadata();
55 var nodes;
56
57 function copy(obj, prop, arr) {
58 if (typeof arr !== "undefined") {
59 var a = [];
60 for (var i = 0; i<arr.length;i++) {
61 a[i] = arr[i];
62 }
63 obj[prop] = a;
64 }
65 }
66
67
68 var ret = new Object();
69 ret.location = document.location.href;
70 ret.type = "manual";
71 ret.tests = new Object();
72
73 var node = document.querySelector('script[src$="/resources/testharness.js"]');
74 if (node !== null) {
75 ret.type = "script";
76 }
77
78 if (ret.type === "script") {
79 if (typeof metadata_generator === "undefined"
80 || Object.keys(metadata_generator.currentMetadata).length === 0)
81 return "WRAPPER:TRY_AGAIN";
82 else {
83 for (var key in metadata_generator.currentMetadata) {
84 var obj = metadata_generator.currentMetadata[key];
85 var newtest = new Object();
86 ret.tests[key]= newtest;
87 if (typeof obj.help === "undefined") {
88 copy(newtest, "help", meta.help);
89 } else if (typeof obj.help === "string") {
90 newtest.help = [ obj.help ];
91 }
92 if (typeof obj.author === "undefined") {
93 copy(newtest, "author", meta.author);
94 } else if (typeof obj.author === "string") {
95 newtest.author = [ obj.author ];
96 }
97 if (typeof obj.assert === "undefined") {
98 copy(newtest, "assert", meta.assert);
99 } else if (typeof obj.assert === "string") {
100 newtest.assert = [ obj.assert ];
101 }
102 copy(newtest, "match", meta.match);
103 copy(newtest, "mismatch", meta.mismatch);
104 copy(newtest, "flags", meta.flags);
105 }
106 return ret;
107 }
108 } else {
109 var newtest = meta;
110 ret.tests[document.title]= newtest;
111
112 if (typeof newtest.match !== "undefined"
113 || typeof newtest.mismatch !== "undefined") {
114 ret.type = "reftest";
115 }
116
117 return ret;
118 }
119
120}
121
122function __give_up() {
123 var ret = new Object();
124 ret.location = document.location.href;
125 ret.type = "manual";
126 ret.tests = new Object();
127
128 var node = document.querySelector('script[src$="/resources/testharness.js"]');
129 if (node !== null) {
130 ret.type = "script";
131 } else if (typeof newtest.match !== "undefined"
132 || typeof newtest.mismatch !== "undefined") {
133 ret.type = "reftest";
134 }
135
136 var newtest = __get_metadata();
137 ret.tests[document.title]= newtest;
138
139 return ret;
140}