Repository navigation
Expand file tree
/
Copy pathdocs.js
More file actions
115 lines (97 loc) · 3.02 KB
/
Copy pathdocs.js
File metadata and controls
115 lines (97 loc) · 3.02 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/**
* Copyright 2014 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
var assert = require('assert');
var fs = require('fs');
var gcloud = require('../');
var glob = require('glob');
var mitm = require('mitm');
var vm = require('vm');
var util = require('../lib/common/util.js');
function runCodeInSandbox(code, sandbox) {
vm.createContext(sandbox);
try {
vm.runInNewContext(code, sandbox, {
filename: 'assert-code.vm',
timeout: 1000
});
} catch(err) {
// rethrow the error with code for context and resolving issues faster.
throw new Error('\n' + code + '\n\n' + err.message);
}
}
describe('documentation', function() {
var MITM;
before(function() {
// Set a global to indicate to any interested function inside of gcloud that
// this is a sandbox environment.
global.GCLOUD_SANDBOX_ENV = true;
// Turn off the network so that API calls aren't actually made.
MITM = mitm();
});
after(function() {
delete global.GCLOUD_SANDBOX_ENV;
// Re-enable the network.
MITM.disable();
});
var jsonGlob = 'docs/json/master/**/*.json';
var ignore = [
'docs/json/master/types.json'
];
var FILES = glob.sync(jsonGlob, { ignore: ignore });
FILES.forEach(function(filename) {
var fileContents = fs.readFileSync(filename, {
encoding: 'utf8'
});
var fileDocBlocks;
try {
fileDocBlocks = JSON.parse(fileContents);
} catch(e) {
throw new Error([
'Failed to parse one of the doc files (' + e.message + ')',
'Filename: ' + filename,
'File contents: "' + fileContents + '"'
].join('\n'));
}
var mockConsole = Object.keys(console).reduce(function(console, method) {
console[method] = util.noop;
return console;
}, {});
var sandbox = {
gcloud: gcloud,
require: require,
process: process,
console: mockConsole,
Buffer: Buffer,
Date: Date,
Array: Array,
global: global
};
var examples = fileDocBlocks.methods.map(function(method) {
return method.examples.map(function(example) {
return example.code;
}).join('\n');
});
var code = examples
.join('\n')
.replace(/require\(\'gcloud\'\)/g, 'require(\'..\/\')')
.replace(/require\(\'gcloud/g, 'require(\'..');
it('should run tests for ' + filename + ' without errors', function() {
this.timeout(5000);
assert.doesNotThrow(runCodeInSandbox.bind(null, code, sandbox));
});
});
});