]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/test/tap/config-meta.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / test / tap / config-meta.js
1 // this is a weird meta test.  It verifies that all the instances of
2 // `npm.config.get(...)` are:
3 // a) Simple strings, and not variables
4 // b) Documented
5 // c) Defined in the `npmconf` package.
6
7 var test = require("tap").test
8 var fs = require("fs")
9 var path = require("path")
10 var root = path.resolve(__dirname, "..", "..")
11 var lib = path.resolve(root, "lib")
12 var nm = path.resolve(root, "node_modules")
13 var doc = path.resolve(root, "doc/misc/npm-config.md")
14 var FILES = []
15 var CONFS = {}
16 var DOC = {}
17
18 var exceptions = [
19   path.resolve(lib, "adduser.js"),
20   path.resolve(lib, "config.js"),
21   path.resolve(lib, "publish.js"),
22   path.resolve(lib, "utils", "lifecycle.js"),
23   path.resolve(lib, "utils", "map-to-registry.js"),
24   path.resolve(nm, "npm-registry-client", "lib", "publish.js"),
25   path.resolve(nm, "npm-registry-client", "lib", "request.js")
26 ]
27
28 test("get files", function (t) {
29   walk(nm)
30   walk(lib)
31   t.pass("got files")
32   t.end()
33
34   function walk(lib) {
35     var files = fs.readdirSync(lib).map(function (f) {
36       return path.resolve(lib, f)
37     })
38     files.forEach(function (f) {
39       try {
40         var s = fs.lstatSync(f)
41       } catch (er) {
42         return
43       }
44       if (s.isDirectory())
45         walk(f)
46       else if (f.match(/\.js$/))
47         FILES.push(f)
48     })
49   }
50 })
51
52 test("get lines", function (t) {
53   FILES.forEach(function (f) {
54     var lines = fs.readFileSync(f, "utf8").split(/\r|\n/)
55     lines.forEach(function (l, i) {
56       var matches = l.split(/conf(?:ig)?\.get\(/g)
57       matches.shift()
58       matches.forEach(function (m) {
59         m = m.split(")").shift()
60         var literal = m.match(/^['"].+?['"]/)
61         if (literal) {
62           m = literal[0].slice(1, -1)
63           if (!m.match(/^\_/) && m !== "argv")
64             CONFS[m] = {
65               file: f,
66               line: i
67             }
68         } else if (exceptions.indexOf(f) === -1) {
69           t.fail("non-string-literal config used in " + f + ":" + i)
70         }
71       })
72     })
73   })
74   t.pass("got lines")
75   t.end()
76 })
77
78 test("get docs", function (t) {
79   var d = fs.readFileSync(doc, "utf8").split(/\r|\n/)
80   // walk down until the "## Config Settings" section
81   for (var i = 0; i < d.length && d[i] !== "## Config Settings"; i++);
82   i++
83   // now gather up all the ^###\s lines until the next ^##\s
84   for (; i < d.length && !d[i].match(/^## /); i++) {
85     if (d[i].match(/^### /))
86       DOC[ d[i].replace(/^### /, "").trim() ] = true
87   }
88   t.pass("read the docs")
89   t.end()
90 })
91
92 test("check configs", function (t) {
93   var defs = require("../../lib/config/defaults.js")
94   var types = Object.keys(defs.types)
95   var defaults = Object.keys(defs.defaults)
96   for (var c1 in CONFS) {
97     if (CONFS[c1].file.indexOf(lib) === 0) {
98       t.ok(DOC[c1], "should be documented " + c1 + " "
99           + CONFS[c1].file + ":" + CONFS[c1].line)
100       t.ok(types.indexOf(c1) !== -1, "should be defined in npmconf " + c1)
101       t.ok(defaults.indexOf(c1) !== -1, "should have default in npmconf " + c1)
102     }
103   }
104
105   for (var c2 in DOC) {
106     if (c2 !== "versions" && c2 !== "version" && c2 !== "init.version") {
107       t.ok(CONFS[c2], "config in doc should be used somewhere " + c2)
108       t.ok(types.indexOf(c2) !== -1, "should be defined in npmconf " + c2)
109       t.ok(defaults.indexOf(c2) !== -1, "should have default in npmconf " + c2)
110     }
111   }
112
113   types.forEach(function (c) {
114     if (!c.match(/^\_/) && c !== "argv" && !c.match(/^versions?$/)) {
115       t.ok(DOC[c], "defined type should be documented " + c)
116       t.ok(CONFS[c], "defined type should be used " + c)
117     }
118   })
119
120   defaults.forEach(function (c) {
121     if (!c.match(/^\_/) && c !== "argv" && !c.match(/^versions?$/)) {
122       t.ok(DOC[c], "defaulted type should be documented " + c)
123       t.ok(CONFS[c], "defaulted type should be used " + c)
124     }
125   })
126
127   t.end()
128 })