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"), |