Commit 78b1f609dca7acb2a61bb332f78ddc972cf25aa3

Authored by Ábner Oliveira
1 parent e83eb73f
Exists in master and in 1 other branch dev-fixes

changes to make coverage work

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
@@ -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 });
@@ -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
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +(function() {
  2 + 'use strict';
  3 +
  4 + angular
  5 + .module('noosferoApp')
  6 + .component('noosferoActivities', {
  7 + bindings: {
  8 + activities: '<'
  9 + },
  10 + templateUrl: 'app/components/noosfero-activities/activities.html'
  11 + });
  12 +
  13 +})();
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>';
src/app/components/noosfero/noosfero-template.filter.ts 0 → 100644
@@ -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 &quot;ng-forward&quot;; @@ -19,7 +18,7 @@ import {bootstrap, bundle} from &quot;ng-forward&quot;;
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 &quot;./../components/auth/auth_service&quot;; @@ -16,7 +16,7 @@ import {AuthService} from &quot;./../components/auth/auth_service&quot;;
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
1 1
2 -require("core-js/shim");  
3 -require("reflect-metadata");  
4 -require("ng-forward"); 2 +// require("core-js/shim");
  3 +// require("reflect-metadata");
  4 +// require("ng-forward");
5 5
6 6
7 // require all spec files 7 // require all spec files
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"),