From b6c42d5e8155edc9013bd531f553c278ce37c3c8 Mon Sep 17 00:00:00 2001 From: Julie Date: Mon, 6 Jan 2014 15:13:57 -0800 Subject: feat(docs): adding the ngdoc-tag This is the first step in migrating tests from to . In-documentation examples with doc:protractor sections will have their contents output to a tab on the docs site as well as output to a standalone test file in build/docs/ptore2e. --- docs/src/example.js | 19 ++++++++++++++++--- docs/src/gen-docs.js | 6 ++++++ docs/src/ngdoc.js | 24 ++++++++++++++++++++++-- 3 files changed, 44 insertions(+), 5 deletions(-) (limited to 'docs/src') diff --git a/docs/src/example.js b/docs/src/example.js index 9471b3fa..7a32ce04 100644 --- a/docs/src/example.js +++ b/docs/src/example.js @@ -6,7 +6,8 @@ var makeUnique = { 'script.js': true, 'unit.js': true, 'spec.js': true, - 'scenario.js': true + 'scenario.js': true, + 'protractorTest.js': true } function ids(list) { @@ -14,7 +15,7 @@ function ids(list) { }; -exports.Example = function(scenarios) { +exports.Example = function(scenarios, protractorTests) { this.module = ''; this.deps = ['angular.js']; this.html = []; @@ -24,6 +25,8 @@ exports.Example = function(scenarios) { this.unit = []; this.scenario = []; this.scenarios = scenarios; + this.protractorTest = []; + this.protractorTests = protractorTests; } exports.Example.prototype.setModule = function(module) { @@ -44,6 +47,10 @@ exports.Example.prototype.addSource = function(name, content) { var ext = name == 'scenario.js' ? 'scenario' : name.split('.')[1], id = name; + if (name == 'protractorTest.js') { + ext = 'protractorTest'; + } + if (makeUnique[name] && usedIds[id]) { id = name + '-' + (seqCount++); } @@ -56,6 +63,9 @@ exports.Example.prototype.addSource = function(name, content) { if (ext == 'scenario') { this.scenarios.push(content); } + if (ext == 'protractorTest') { + this.protractorTests.push(content); + } }; exports.Example.prototype.enableAnimations = function() { @@ -92,6 +102,7 @@ exports.Example.prototype.toHtmlEdit = function() { out.push(' source-edit-json="' + ids(this.json) + '"'); out.push(' source-edit-unit="' + ids(this.unit) + '"'); out.push(' source-edit-scenario="' + ids(this.scenario) + '"'); + out.push(' source-edit-protractor="' + ids(this.protractorTest) + '"'); out.push('>\n'); return out.join(''); }; @@ -107,6 +118,7 @@ exports.Example.prototype.toHtmlTabs = function() { htmlTabs(this.json); htmlTabs(this.unit); htmlTabs(this.scenario); + htmlTabs(this.protractorTest); out.push(''); return out.join(''); @@ -119,7 +131,8 @@ exports.Example.prototype.toHtmlTabs = function() { if (name === 'index.html') { wrap = ' ng-html-wrap="' + self.module + ' ' + self.deps.join(' ') + '"'; } - if (name == 'scenario.js') name = 'End to end test'; + if (name == 'scenario.js') name = 'ngScenario e2e test'; + if (name == 'protractorTest.js') name = 'Protractor e2e test'; out.push( '
\n' + diff --git a/docs/src/gen-docs.js b/docs/src/gen-docs.js index abb001b5..9fc5f8db 100755 --- a/docs/src/gen-docs.js +++ b/docs/src/gen-docs.js @@ -17,6 +17,8 @@ writer.makeDir('build/docs/', true).then(function() { return writer.makeDir('build/docs/components/bootstrap'); }).then(function() { return writer.makeDir('build/docs/components/font-awesome'); +}).then(function() { + return writer.makeDir('build/docs/e2etests'); }).then(function() { console.log('Generating AngularJS Reference Documentation...'); return reader.collect(); @@ -53,6 +55,10 @@ writer.makeDir('build/docs/', true).then(function() { var id = doc.id.replace('angular.Module', 'angular.IModule'); fileFutures.push(writer.output('partials/' + doc.section + '/' + id + '.html', doc.html())); + // If it has a sample Protractor test, output that as well. + if (doc.protractorTests.length) { + fileFutures.push(writer.output('ptore2e/' + doc.section + '/' + id + '_test.js', ngdoc.writeProtractorTest(doc))); + } }); ngdoc.checkBrokenLinks(docs); diff --git a/docs/src/ngdoc.js b/docs/src/ngdoc.js index 37f5aeaf..c009c950 100644 --- a/docs/src/ngdoc.js +++ b/docs/src/ngdoc.js @@ -35,6 +35,7 @@ var lookupMinerrMsg = function (doc) { exports.trim = trim; exports.metadata = metadata; exports.scenarios = scenarios; +exports.writeProtractorTest = writeProtractorTest; exports.merge = merge; exports.checkBrokenLinks = checkBrokenLinks; exports.Doc = Doc; @@ -155,6 +156,7 @@ function Doc(text, file, line) { this.line = line; } this.scenarios = this.scenarios || []; + this.protractorTests = this.protractorTests || []; this.requires = this.requires || []; this.param = this.param || []; this.properties = this.properties || []; @@ -292,7 +294,7 @@ Doc.prototype = { replace(/([\s\S]*?)<\/example>/gmi, function(_, module, deps, animations, content) { - var example = new Example(self.scenarios); + var example = new Example(self.scenarios, self.protractorTests); if(animations) { example.enableAnimations(); example.addDeps('angular-animate.js'); @@ -329,7 +331,7 @@ Doc.prototype = { }). replace(/^]*)?>([\s\S]*)<\/doc:example>/mi, function(_, attrs, content) { var html, script, scenario, - example = new Example(self.scenarios); + example = new Example(self.scenarios, self.protractorTests); example.setModule((attrs||'module=""').match(/^\s*module=["'](.*)["']\s*$/)[1]); content. @@ -347,6 +349,8 @@ Doc.prototype = { }). replace(/()([\s\S]*)(<\/doc:scenario>)/mi, function(_, before, content){ example.addSource('scenario.js', content); + }).replace(/()([\s\S]*)(<\/doc:protractor>)/mi, function(_, before, content){ + example.addSource('protractorTest.js', content); }); return placeholder(example.toHtml()); @@ -1106,6 +1110,22 @@ function scenarios(docs){ } } +function writeProtractorTest(doc){ + var lines = []; + lines.push('describe("' + doc.section + '/' + doc.id + '", function() {'); + lines.push(' beforeEach(function() {'); + lines.push(' browser.get("index-nocache.html#!/' + doc.section + '/' + doc.id + '");'); + lines.push(' });'); + lines.push(''); + doc.protractorTests.forEach(function(test){ + lines.push(indentCode(trim(test), 2)); + lines.push(''); + }); + lines.push('});'); + lines.push(''); + return lines.join('\n'); +} + ////////////////////////////////////////////////////////// function metadata(docs){ -- cgit v1.2.3