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 46  
47 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 55 // para cada pasta executa o remap do coverage que está apontando para os arquivos js
56 56 // para apontar para os arquivos Typecript
57 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 106 \ No newline at end of file
... ...
karma.conf.js
... ... @@ -7,8 +7,8 @@ var conf = require('./gulp/conf');
7 7 var argv = require("yargs").argv;
8 8  
9 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 13 if (argv.singleRun) {
14 14 singleRun = true;
... ... @@ -16,6 +16,7 @@ if (argv.singleRun) {
16 16  
17 17 var projectFiles = [
18 18 './src/commons.js',
  19 + './src/vendor.bundle.js',
19 20 './src/noosfero.js',
20 21 './src/noosfero-specs.js'
21 22 ];
... ... @@ -28,18 +29,19 @@ var karmaPlugins = [
28 29 'karma-jasmine',
29 30 'karma-spec-reporter',
30 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 90  
89 91 var configuration = {
90 92 basePath: '../angular-theme',
91   -
  93 +
92 94 files: listFiles(),
93 95  
94 96 singleRun: singleRun,
... ... @@ -155,13 +157,15 @@ module.exports = function (config) {
155 157 // It was not possible to do it there because karma doesn't let us now if we are
156 158 // running a single test or not
157 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 165 configuration.coverageReporter = {
162 166 dir: 'coverage/',
163 167 reporters: [
164   - /*{ type: 'html' },*/
  168 + { type: 'html' },
165 169 { type: 'json', file: 'coverage-final.json' },
166 170 { type: 'text-summary' }
167 171 ]
... ... @@ -172,12 +176,21 @@ module.exports = function (config) {
172 176 // It was not possible to do it there because karma doesn't let us now if we are
173 177 // running a single test or not
174 178 configuration.preprocessors = {
175   - 'src/noosfero.js': ['sourcemap'],
  179 + 'src/noosfero': ['coverage', 'sourcemap'],
176 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 194 pathSrcHtml.forEach(function (path) {
182 195 configuration.preprocessors[path] = ['ng-html2js'];
183 196 });
... ...
package.json
... ... @@ -7,7 +7,7 @@
7 7 "moment": "^2.11.2"
8 8 },
9 9 "scripts": {
10   - "coverage": "karma start --single-run & npm run remap-coverage",
  10 + "coverage": "karma start --single-run && npm run remap-coverage",
11 11 "remap-coverage": "ts-node --project ./dev-scripts ./dev-scripts/remapCoverage.ts",
12 12 "test-single": "karma start --single-run",
13 13 "test-and-coverage": "karma start & npm run remap-coverage",
... ... @@ -52,7 +52,7 @@
52 52 "gulp-useref": "~1.3.0",
53 53 "gulp-util": "~3.0.6",
54 54 "http-proxy-middleware": "~0.9.0",
55   - "istanbul": "^1.0.0-alpha.2",
  55 + "istanbul": "^0.4.2",
56 56 "karma": "~0.13.10",
57 57 "karma-angular-filesort": "~1.0.0",
58 58 "karma-chrome-launcher": "^0.2.2",
... ... @@ -71,7 +71,7 @@
71 71 "phantomjs": "~1.9.18",
72 72 "phantomjs-polyfill": "0.0.2",
73 73 "reflect-metadata": "^0.1.3",
74   - "remap-istanbul": "^0.5.1",
  74 + "remap-istanbul": "github:sitepen/remap-istanbul",
75 75 "replace": "^0.3.0",
76 76 "ts-loader": "^0.8.1",
77 77 "ts-node": "^0.5.5",
... ...
src/app/components/navbar/navbar.spec.ts
... ... @@ -5,7 +5,7 @@ provideEmptyObjects
5 5 } from "./../../../spec/helpers";
6 6 import {
7 7 Navbar
8   -} from "./";
  8 +} from "./navbar";
9 9 import {
10 10 AUTH_EVENTS
11 11 } from "./../auth";
... ...
src/app/components/noosfero-activities/activities.component.ts 0 → 100644
... ... @@ -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 2 import {Input, provide, Component} from 'ng-forward';
3 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 7 // this htmlTemplate will be re-used between the container components in this spec file
8 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 @@
  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 @@
  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 3 import {NoosferoApp} from "./index.module";
5 4 import {noosferoModuleConfig} from "./index.config";
6 5 import {noosferoAngularRunBlock} from "./index.run";
... ... @@ -19,7 +18,7 @@ import {bootstrap, bundle} from &quot;ng-forward&quot;;
19 18 import {AUTH_EVENTS} from "./components/auth/auth_events";
20 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 23 declare var moment: any;
25 24  
... ...
src/app/main/main.component.ts
1 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 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 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 21 import {MainBlock} from "../components/noosfero-blocks/main-block/main-block.component";
22 22  
... ...
src/spec/helpers.ts
1 1  
2 2 import {ngClass, TestComponentBuilder, ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder';
3   -import {quickFixture} from 'ng-forward/cjs/tests/utils';
4 3 import {Provider, Input, provide, Component} from 'ng-forward';
5 4 import {User, Person} from "./../app/models/interfaces";
6 5  
... ...
src/specs.ts
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 7 // require all spec files
... ...
webpack.config.js
... ... @@ -13,7 +13,7 @@ if (argv.production) {
13 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 18 var uglifyLoaderConfig = {
19 19 // I want to uglify with mangling only app files, not thirdparty libs
... ... @@ -22,16 +22,27 @@ var uglifyLoaderConfig = {
22 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 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 47 output: {
37 48 path: path.join(__dirname, "src"),
... ...