Commit 78b1f609dca7acb2a61bb332f78ddc972cf25aa3
1 parent
e83eb73f
Exists in
master
and in
1 other branch
changes to make coverage work
Showing
13 changed files
with
156 additions
and
48 deletions
Show diff stats
dev-scripts/remapCoverage.ts
@@ -46,21 +46,60 @@ fs.readdir(coveragePath, (err, directories) => { | @@ -46,21 +46,60 @@ fs.readdir(coveragePath, (err, directories) => { | ||
46 | 46 | ||
47 | let absoluteProjectPath = path.join(__dirname, "../"); | 47 | let absoluteProjectPath = path.join(__dirname, "../"); |
48 | 48 | ||
49 | - replace({ | ||
50 | - regex: absoluteProjectPath, | ||
51 | - replacement: "", | ||
52 | - paths: [coverageFile], | ||
53 | - sillent: true | ||
54 | - }); | 49 | + // replace({ |
50 | + // regex: absoluteProjectPath, | ||
51 | + // replacement: "", | ||
52 | + // paths: [coverageFile], | ||
53 | + // sillent: true | ||
54 | + // }); | ||
55 | // para cada pasta executa o remap do coverage que está apontando para os arquivos js | 55 | // para cada pasta executa o remap do coverage que está apontando para os arquivos js |
56 | // para apontar para os arquivos Typecript | 56 | // para apontar para os arquivos Typecript |
57 | // gerando dois reports: JSON e HTML | 57 | // gerando dois reports: JSON e HTML |
58 | - remapIstanbul(coverageFile, | ||
59 | - { | ||
60 | - "basePath": "./src/", | ||
61 | - "json": path.join(coverageFolder, "coverage-final-remaped.json"), | ||
62 | - "html": path.join(coverageFolder) | ||
63 | - }); | 58 | + // remapIstanbul(coverageFile, |
59 | + // { | ||
60 | + // "exclude": | ||
61 | + // "json": path.join(coverageFolder, "coverage-final-remaped.json") | ||
62 | + // }); | ||
63 | + | ||
64 | + // replace({ | ||
65 | + // regex: "src/webpack:/", | ||
66 | + // replacement: "", | ||
67 | + // paths: [coverageFile], | ||
68 | + // sillent: true | ||
69 | + // }); | ||
70 | + | ||
71 | + var loadCoverage = require('remap-istanbul/lib/loadCoverage'); | ||
72 | + var remap = require('remap-istanbul/lib/remap'); | ||
73 | + var writeReport = require('remap-istanbul/lib/writeReport'); | ||
74 | + | ||
75 | + var collector = remap(loadCoverage(coverageFile), { | ||
76 | + exclude: 'Reflect', | ||
77 | + /*readFile: function(filePath): any { | ||
78 | + var pathNormalized = filePath.replace("webpack:///./src/", ""); | ||
79 | + pathNormalized = pathNormalized.replace(/\.ts\?(\w+)"/, ".ts\""); | ||
80 | + console.log("FILE PATH: ", pathNormalized); | ||
81 | + if (!fs.existsSync(pathNormalized)) { | ||
82 | + console.warn(new Error('Could not find file: "' + pathNormalized + '"')); | ||
83 | + return ''; | ||
84 | + } | ||
85 | + return fs.readFileSync(pathNormalized); | ||
86 | + }*/ | ||
87 | + }); | ||
88 | + | ||
89 | + var Store = require("istanbul").Store; | ||
90 | + var store = Store.create("fslookup"); | ||
91 | + store.get = function (key) { | ||
92 | + var pathNormalized = key.replace("src/webpack:/", ""); | ||
93 | + console.error("PATH >>> ", pathNormalized); | ||
94 | + pathNormalized = pathNormalized.replace(/\.ts\?(\w+)/, ".ts"); | ||
95 | + console.log("my store got called!", key, pathNormalized); | ||
96 | + return fs.readFileSync(pathNormalized, 'utf8'); | ||
97 | + } | ||
98 | + writeReport(collector, 'html', coverageFolder, store); | ||
99 | + writeReport(collector, 'json', path.join(coverageFolder, 'coverage-final-remaped.json'), store).then(function() { | ||
100 | + | ||
101 | + /* do something else now */ | ||
102 | + }); | ||
64 | }); | 103 | }); |
65 | 104 | ||
66 | }); | 105 | }); |
67 | \ No newline at end of file | 106 | \ No newline at end of file |
karma.conf.js
@@ -7,8 +7,8 @@ var conf = require('./gulp/conf'); | @@ -7,8 +7,8 @@ var conf = require('./gulp/conf'); | ||
7 | var argv = require("yargs").argv; | 7 | var argv = require("yargs").argv; |
8 | 8 | ||
9 | var singleRun = (argv.singleRun !== undefined && argv.singleRun); | 9 | var singleRun = (argv.singleRun !== undefined && argv.singleRun); |
10 | -var coverage = (argv.coverage === undefined || argv.coverage); | ||
11 | - | 10 | +var coverage = (argv.coverage === undefined || argv.coverage); |
11 | + | ||
12 | 12 | ||
13 | if (argv.singleRun) { | 13 | if (argv.singleRun) { |
14 | singleRun = true; | 14 | singleRun = true; |
@@ -16,6 +16,7 @@ if (argv.singleRun) { | @@ -16,6 +16,7 @@ if (argv.singleRun) { | ||
16 | 16 | ||
17 | var projectFiles = [ | 17 | var projectFiles = [ |
18 | './src/commons.js', | 18 | './src/commons.js', |
19 | + './src/vendor.bundle.js', | ||
19 | './src/noosfero.js', | 20 | './src/noosfero.js', |
20 | './src/noosfero-specs.js' | 21 | './src/noosfero-specs.js' |
21 | ]; | 22 | ]; |
@@ -28,18 +29,19 @@ var karmaPlugins = [ | @@ -28,18 +29,19 @@ var karmaPlugins = [ | ||
28 | 'karma-jasmine', | 29 | 'karma-jasmine', |
29 | 'karma-spec-reporter', | 30 | 'karma-spec-reporter', |
30 | 'karma-ng-html2js-preprocessor', | 31 | 'karma-ng-html2js-preprocessor', |
31 | - 'karma-sourcemap-loader' | 32 | + 'karma-sourcemap-loader', |
33 | + 'karma-coverage' | ||
32 | ]; | 34 | ]; |
33 | 35 | ||
34 | 36 | ||
35 | -var karmaReporters = ['spec']; | 37 | +var karmaReporters = ['spec', 'coverage']; |
36 | 38 | ||
37 | 39 | ||
38 | 40 | ||
39 | -if (coverage) { | ||
40 | - karmaPlugins.push('karma-coverage'); | ||
41 | - karmaReporters.push('coverage'); | ||
42 | -} | 41 | +// if (coverage) { |
42 | +// karmaPlugins.push('karma-coverage'); | ||
43 | +// karmaReporters.push('coverage'); | ||
44 | +// } | ||
43 | 45 | ||
44 | 46 | ||
45 | 47 | ||
@@ -88,7 +90,7 @@ module.exports = function (config) { | @@ -88,7 +90,7 @@ module.exports = function (config) { | ||
88 | 90 | ||
89 | var configuration = { | 91 | var configuration = { |
90 | basePath: '../angular-theme', | 92 | basePath: '../angular-theme', |
91 | - | 93 | + |
92 | files: listFiles(), | 94 | files: listFiles(), |
93 | 95 | ||
94 | singleRun: singleRun, | 96 | singleRun: singleRun, |
@@ -155,13 +157,15 @@ module.exports = function (config) { | @@ -155,13 +157,15 @@ module.exports = function (config) { | ||
155 | // It was not possible to do it there because karma doesn't let us now if we are | 157 | // It was not possible to do it there because karma doesn't let us now if we are |
156 | // running a single test or not | 158 | // running a single test or not |
157 | configuration.preprocessors = { | 159 | configuration.preprocessors = { |
158 | - 'src/noosfero.js': ['sourcemap', 'coverage'] | 160 | + 'src/noosfero.js': ['sourcemap', 'coverage'], |
161 | + 'src/**/*.ts': ['sourcemap'] | ||
162 | + | ||
159 | }; | 163 | }; |
160 | 164 | ||
161 | configuration.coverageReporter = { | 165 | configuration.coverageReporter = { |
162 | dir: 'coverage/', | 166 | dir: 'coverage/', |
163 | reporters: [ | 167 | reporters: [ |
164 | - /*{ type: 'html' },*/ | 168 | + { type: 'html' }, |
165 | { type: 'json', file: 'coverage-final.json' }, | 169 | { type: 'json', file: 'coverage-final.json' }, |
166 | { type: 'text-summary' } | 170 | { type: 'text-summary' } |
167 | ] | 171 | ] |
@@ -172,12 +176,21 @@ module.exports = function (config) { | @@ -172,12 +176,21 @@ module.exports = function (config) { | ||
172 | // It was not possible to do it there because karma doesn't let us now if we are | 176 | // It was not possible to do it there because karma doesn't let us now if we are |
173 | // running a single test or not | 177 | // running a single test or not |
174 | configuration.preprocessors = { | 178 | configuration.preprocessors = { |
175 | - 'src/noosfero.js': ['sourcemap'], | 179 | + 'src/noosfero': ['coverage', 'sourcemap'], |
176 | 'src/**/*.ts': ['sourcemap'] | 180 | 'src/**/*.ts': ['sourcemap'] |
177 | }; | 181 | }; |
182 | + | ||
183 | + configuration.coverageReporter = { | ||
184 | + dir: 'coverage/', | ||
185 | + reporters: [ | ||
186 | + { type: 'html' }, | ||
187 | + { type: 'json', file: 'coverage-final.json' }, | ||
188 | + { type: 'text-summary' } | ||
189 | + ] | ||
190 | + }; | ||
178 | } | 191 | } |
179 | - | ||
180 | - | 192 | + |
193 | + | ||
181 | pathSrcHtml.forEach(function (path) { | 194 | pathSrcHtml.forEach(function (path) { |
182 | configuration.preprocessors[path] = ['ng-html2js']; | 195 | configuration.preprocessors[path] = ['ng-html2js']; |
183 | }); | 196 | }); |
package.json
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | "moment": "^2.11.2" | 7 | "moment": "^2.11.2" |
8 | }, | 8 | }, |
9 | "scripts": { | 9 | "scripts": { |
10 | - "coverage": "karma start --single-run & npm run remap-coverage", | 10 | + "coverage": "karma start --single-run && npm run remap-coverage", |
11 | "remap-coverage": "ts-node --project ./dev-scripts ./dev-scripts/remapCoverage.ts", | 11 | "remap-coverage": "ts-node --project ./dev-scripts ./dev-scripts/remapCoverage.ts", |
12 | "test-single": "karma start --single-run", | 12 | "test-single": "karma start --single-run", |
13 | "test-and-coverage": "karma start & npm run remap-coverage", | 13 | "test-and-coverage": "karma start & npm run remap-coverage", |
@@ -52,7 +52,7 @@ | @@ -52,7 +52,7 @@ | ||
52 | "gulp-useref": "~1.3.0", | 52 | "gulp-useref": "~1.3.0", |
53 | "gulp-util": "~3.0.6", | 53 | "gulp-util": "~3.0.6", |
54 | "http-proxy-middleware": "~0.9.0", | 54 | "http-proxy-middleware": "~0.9.0", |
55 | - "istanbul": "^1.0.0-alpha.2", | 55 | + "istanbul": "^0.4.2", |
56 | "karma": "~0.13.10", | 56 | "karma": "~0.13.10", |
57 | "karma-angular-filesort": "~1.0.0", | 57 | "karma-angular-filesort": "~1.0.0", |
58 | "karma-chrome-launcher": "^0.2.2", | 58 | "karma-chrome-launcher": "^0.2.2", |
@@ -71,7 +71,7 @@ | @@ -71,7 +71,7 @@ | ||
71 | "phantomjs": "~1.9.18", | 71 | "phantomjs": "~1.9.18", |
72 | "phantomjs-polyfill": "0.0.2", | 72 | "phantomjs-polyfill": "0.0.2", |
73 | "reflect-metadata": "^0.1.3", | 73 | "reflect-metadata": "^0.1.3", |
74 | - "remap-istanbul": "^0.5.1", | 74 | + "remap-istanbul": "github:sitepen/remap-istanbul", |
75 | "replace": "^0.3.0", | 75 | "replace": "^0.3.0", |
76 | "ts-loader": "^0.8.1", | 76 | "ts-loader": "^0.8.1", |
77 | "ts-node": "^0.5.5", | 77 | "ts-node": "^0.5.5", |
src/app/components/navbar/navbar.spec.ts
@@ -5,7 +5,7 @@ provideEmptyObjects | @@ -5,7 +5,7 @@ provideEmptyObjects | ||
5 | } from "./../../../spec/helpers"; | 5 | } from "./../../../spec/helpers"; |
6 | import { | 6 | import { |
7 | Navbar | 7 | Navbar |
8 | -} from "./"; | 8 | +} from "./navbar"; |
9 | import { | 9 | import { |
10 | AUTH_EVENTS | 10 | AUTH_EVENTS |
11 | } from "./../auth"; | 11 | } from "./../auth"; |
src/app/components/noosfero-activities/activities.component.ts
0 → 100644
src/app/components/noosfero-articles/article/article_view.spec.ts
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | import {Input, provide, Component} from 'ng-forward'; | 2 | import {Input, provide, Component} from 'ng-forward'; |
3 | import {ArticleView, ArticleDefaultView} from './article_view'; | 3 | import {ArticleView, ArticleDefaultView} from './article_view'; |
4 | 4 | ||
5 | -import {createComponentFromClass, quickCreateComponent} from "../../../../spec/helpers.ts"; | 5 | +import {createComponentFromClass, quickCreateComponent} from "../../../../spec/helpers"; |
6 | 6 | ||
7 | // this htmlTemplate will be re-used between the container components in this spec file | 7 | // this htmlTemplate will be re-used between the container components in this spec file |
8 | const htmlTemplate: string = '<noosfero-article [article]="ctrl.article" [profile]="ctrl.profile"></noosfero-article>'; | 8 | const htmlTemplate: string = '<noosfero-article [article]="ctrl.article" [profile]="ctrl.profile"></noosfero-article>'; |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +(function() { | ||
2 | + 'use strict'; | ||
3 | + angular | ||
4 | + .module("noosferoApp") | ||
5 | + .filter("noosferoTemplate", function() { | ||
6 | + return function(text, options) { | ||
7 | + for(var option in options) { | ||
8 | + text = text.replace('{'+option+'}', options[option]); | ||
9 | + } | ||
10 | + return text; | ||
11 | + } | ||
12 | + }) | ||
13 | +})(); |
src/app/components/noosfero/profile-image/profile-image.component.ts
0 → 100644
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
1 | +(function() { | ||
2 | + 'use strict'; | ||
3 | + | ||
4 | + angular | ||
5 | + .module('noosferoApp') | ||
6 | + .component('noosferoProfileImage', { | ||
7 | + templateUrl: 'app/components/noosfero/profile-image/profile-image.html', | ||
8 | + bindings: { | ||
9 | + profile: '<' | ||
10 | + }, | ||
11 | + controller: ProfileImageController | ||
12 | + }); | ||
13 | + | ||
14 | + /** @ngInject */ | ||
15 | + function ProfileImageController() { | ||
16 | + var vm = this; | ||
17 | + vm.defaultIcon = 'fa-users'; | ||
18 | + if(vm.profile && vm.profile.type==='Person') vm.defaultIcon = 'fa-user'; | ||
19 | + } | ||
20 | + | ||
21 | +})(); |
src/app/index.ts
1 | 1 | ||
2 | -import "core-js/shim"; | ||
3 | -import "reflect-metadata"; | 2 | + |
4 | import {NoosferoApp} from "./index.module"; | 3 | import {NoosferoApp} from "./index.module"; |
5 | import {noosferoModuleConfig} from "./index.config"; | 4 | import {noosferoModuleConfig} from "./index.config"; |
6 | import {noosferoAngularRunBlock} from "./index.run"; | 5 | import {noosferoAngularRunBlock} from "./index.run"; |
@@ -19,7 +18,7 @@ import {bootstrap, bundle} from "ng-forward"; | @@ -19,7 +18,7 @@ import {bootstrap, bundle} from "ng-forward"; | ||
19 | import {AUTH_EVENTS} from "./components/auth/auth_events"; | 18 | import {AUTH_EVENTS} from "./components/auth/auth_events"; |
20 | import {AuthController} from "./components/auth/auth_controller"; | 19 | import {AuthController} from "./components/auth/auth_controller"; |
21 | 20 | ||
22 | -import {Navbar} from "./components/navbar"; | 21 | +import {Navbar} from "./components/navbar/navbar"; |
23 | 22 | ||
24 | declare var moment: any; | 23 | declare var moment: any; |
25 | 24 |
src/app/main/main.component.ts
1 | import {bundle, Component, StateConfig} from "ng-forward"; | 1 | import {bundle, Component, StateConfig} from "ng-forward"; |
2 | -import {NoosferoArticleBlog} from "./../components/noosfero-articles/blog/blog.component.ts"; | 2 | +import {NoosferoArticleBlog} from "./../components/noosfero-articles/blog/blog.component"; |
3 | 3 | ||
4 | import {ArticleView} from "../components/noosfero-articles/article/article_view"; | 4 | import {ArticleView} from "../components/noosfero-articles/article/article_view"; |
5 | 5 | ||
@@ -16,7 +16,7 @@ import {AuthService} from "./../components/auth/auth_service"; | @@ -16,7 +16,7 @@ import {AuthService} from "./../components/auth/auth_service"; | ||
16 | import {Session} from "./../components/auth/session"; | 16 | import {Session} from "./../components/auth/session"; |
17 | 17 | ||
18 | 18 | ||
19 | -import {Navbar} from "../components/navbar"; | 19 | +import {Navbar} from "../components/navbar/navbar"; |
20 | 20 | ||
21 | import {MainBlock} from "../components/noosfero-blocks/main-block/main-block.component"; | 21 | import {MainBlock} from "../components/noosfero-blocks/main-block/main-block.component"; |
22 | 22 |
src/spec/helpers.ts
1 | 1 | ||
2 | import {ngClass, TestComponentBuilder, ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; | 2 | import {ngClass, TestComponentBuilder, ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; |
3 | -import {quickFixture} from 'ng-forward/cjs/tests/utils'; | ||
4 | import {Provider, Input, provide, Component} from 'ng-forward'; | 3 | import {Provider, Input, provide, Component} from 'ng-forward'; |
5 | import {User, Person} from "./../app/models/interfaces"; | 4 | import {User, Person} from "./../app/models/interfaces"; |
6 | 5 |
src/specs.ts
webpack.config.js
@@ -13,7 +13,7 @@ if (argv.production) { | @@ -13,7 +13,7 @@ if (argv.production) { | ||
13 | extension = ".min.js" | 13 | extension = ".min.js" |
14 | } | 14 | } |
15 | 15 | ||
16 | -var testFiles = glob.sync("./src/**/*.[sS]pec.ts"); | 16 | +var testFiles = glob.sync("./src/**/**/*.[sS]pec.ts"); |
17 | 17 | ||
18 | var uglifyLoaderConfig = { | 18 | var uglifyLoaderConfig = { |
19 | // I want to uglify with mangling only app files, not thirdparty libs | 19 | // I want to uglify with mangling only app files, not thirdparty libs |
@@ -22,16 +22,27 @@ var uglifyLoaderConfig = { | @@ -22,16 +22,27 @@ var uglifyLoaderConfig = { | ||
22 | loader: "uglify" | 22 | loader: "uglify" |
23 | }; | 23 | }; |
24 | 24 | ||
25 | -var testingFiles = glob.sync("./src/app/**/*.[sS]pec.ts"); | 25 | +var testingFiles = glob.sync("./src/app/**/**/*.[sS]pec.ts"); |
26 | 26 | ||
27 | + | ||
28 | +var entries = { | ||
29 | + noosfero: './src/app/index.ts', | ||
30 | + 'noosfero-specs': testFiles,// './src/specs.ts', | ||
31 | + 'vendor.bundle': ['core-js', 'reflect-metadata', 'ng-forward', 'ng-forward/cjs/testing/test-component-builder'] | ||
32 | +}; | ||
33 | + | ||
34 | + | ||
35 | +// if (argv.test) { | ||
36 | +// entries = { | ||
37 | +// 'noosfero-src': './src/app/index.ts', | ||
38 | +// 'noosfero-specs': testFiles,// './src/specs.ts', | ||
39 | +// 'vendor.bundle': ['core-js', 'reflect-metadata', 'ng-forward', 'ng-forward/cjs/testing/test-component-builder'] | ||
40 | +// }; | ||
41 | +// } | ||
27 | var webpackConfig = { | 42 | var webpackConfig = { |
28 | - watchDelay: 300, | ||
29 | - entry: { | ||
30 | - noosfero: './src/app/index.ts', | ||
31 | - 'noosfero-specs': './src/specs.ts' | ||
32 | - }, | 43 | + entry: entries, |
33 | 44 | ||
34 | - plugins: [new CommonsChunkPlugin("commons.js")], | 45 | + plugins: [new CommonsChunkPlugin("commons", "commons.js")], |
35 | 46 | ||
36 | output: { | 47 | output: { |
37 | path: path.join(__dirname, "src"), | 48 | path: path.join(__dirname, "src"), |