diff options
Diffstat (limited to 'tests/wpt/web-platform-tests/tools/scripts/update-directory-structure.js')
m--------- | tests/wpt/web-platform-tests | 0 | ||||
-rw-r--r-- | tests/wpt/web-platform-tests/tools/scripts/update-directory-structure.js | 106 |
2 files changed, 106 insertions, 0 deletions
diff --git a/tests/wpt/web-platform-tests b/tests/wpt/web-platform-tests deleted file mode 160000 -Subproject 29dfb8944e535d439ca94cf7d1b1d9138a8ad11 diff --git a/tests/wpt/web-platform-tests/tools/scripts/update-directory-structure.js b/tests/wpt/web-platform-tests/tools/scripts/update-directory-structure.js new file mode 100644 index 00000000000..7d73d93ac96 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/scripts/update-directory-structure.js @@ -0,0 +1,106 @@ + +// convert from old-style test structure to new style + +var fs = require("fs") +, pth = require("path") +, jsdom = require("jsdom") +, mkdirp = require("mkdirp").sync +, testDir = pth.join(__dirname, "../..") +, MAX_DEPTH = 3 +, id2path = {} +, limitDepth = { + parsing: true + } +; + +var sections = { + html: "http://www.w3.org/html/wg/drafts/html/master/Overview.html" +, canvas2d: "http://www.w3.org/html/wg/drafts/2dcontext/html5_canvas/Overview.html" +, microdata: "http://www.w3.org/html/wg/drafts/microdata/master/Overview.html" +}; + +function walkTree ($, $el, list) { + $el.find("> li").each(function () { + var $li = $(this) + , $a = $li.find("> a").first() + ; + // skip sections that don't have a number + if (!/^\s*\d+/.test($a.text())) return; + var href = $a.attr("href").replace(/^.*#/, "") + , def = { + id: href.toLowerCase() + .replace(/[^a-z0-9\-]/g, "-") + .replace(/\-{2,}/g, "-") + .replace(/(?:^\-|\-$)/g, "") + , original_id: href + } + , $ol = $li.find("> ol").first() + ; + if ($ol.length) { + def.children = []; + walkTree($, $ol, def.children); + } + list.push(def); + }); +} + +function extractSections (sec, secDir, spec, cb) { + jsdom.env( + spec + , function (err, window) { + if (err) return cb(err); + jsdom.jQueryify(window, "https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js", function (window, $) { + if (!$) return cb("$ was not defined"); + var $root = $("body > ol.toc").first() + , tree = [] + ; + walkTree($, $root, tree); + cb(null, tree, sec, secDir); + } + ); + }); +} + +function makeID2Path (base, tree) { + for (var i = 0, n = tree.length; i < n; i++) { + var sec = tree[i]; + id2path[sec.original_id] = base; + if (sec.children && sec.children.length) makeID2Path(base, sec.children); + } +} + +function makeDirs (base, tree, depth) { + console.log("Making " + base + " at depth " + depth); + for (var i = 0, n = tree.length; i < n; i++) { + var sec = tree[i] + , path = pth.join(base, sec.id) + ; + mkdirp(path); + fs.writeFileSync(pth.join(path, ".gitkeep"), "", "utf8"); + id2path[sec.original_id] = path; + if (sec.id !== sec.original_id) { + fs.writeFileSync(pth.join(path, "original-id.json"), JSON.stringify({ original_id: sec.original_id}), "utf8"); + } + if (sec.children && sec.children.length) { + if (depth === MAX_DEPTH || limitDepth[sec.id]) { + fs.writeFileSync(pth.join(path, "contains.json"), JSON.stringify(sec.children, null, 4), "utf8"); + makeID2Path(path, sec.children); + } + else { + makeDirs(path, sec.children, depth + 1); + } + } + } +} + +for (var sec in sections) { + var secDir = pth.join(testDir, sec); + mkdirp(secDir); + console.log("Launching extraction for " + sec); + extractSections(sec, secDir, sections[sec], function (err, toc, sec, secDir) { + if (err) return console.log("ERROR: " + err); + makeDirs(secDir, toc, 1); + for (var k in id2path) id2path[k] = id2path[k].replace(testDir + "/", ""); + fs.writeFileSync(pth.join(__dirname, "id2path.json"), JSON.stringify(id2path, null, 4), "utf8"); + }); +} |