From 78b1f609dca7acb2a61bb332f78ddc972cf25aa3 Mon Sep 17 00:00:00 2001 From: Abner Oliveira Date: Mon, 7 Mar 2016 07:20:44 -0300 Subject: [PATCH] changes to make coverage work --- dev-scripts/remapCoverage.ts | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++------------ karma.conf.js | 41 +++++++++++++++++++++++++++-------------- package.json | 6 +++--- src/app/components/navbar/navbar.spec.ts | 2 +- src/app/components/noosfero-activities/activities.component.ts | 13 +++++++++++++ src/app/components/noosfero-articles/article/article_view.spec.ts | 2 +- src/app/components/noosfero/noosfero-template.filter.ts | 13 +++++++++++++ src/app/components/noosfero/profile-image/profile-image.component.ts | 21 +++++++++++++++++++++ src/app/index.ts | 5 ++--- src/app/main/main.component.ts | 4 ++-- src/spec/helpers.ts | 1 - src/specs.ts | 6 +++--- webpack.config.js | 27 +++++++++++++++++++-------- 13 files changed, 156 insertions(+), 48 deletions(-) create mode 100644 src/app/components/noosfero-activities/activities.component.ts create mode 100644 src/app/components/noosfero/noosfero-template.filter.ts create mode 100644 src/app/components/noosfero/profile-image/profile-image.component.ts diff --git a/dev-scripts/remapCoverage.ts b/dev-scripts/remapCoverage.ts index 6588e6f..f62ff82 100644 --- a/dev-scripts/remapCoverage.ts +++ b/dev-scripts/remapCoverage.ts @@ -46,21 +46,60 @@ fs.readdir(coveragePath, (err, directories) => { let absoluteProjectPath = path.join(__dirname, "../"); - replace({ - regex: absoluteProjectPath, - replacement: "", - paths: [coverageFile], - sillent: true - }); + // replace({ + // regex: absoluteProjectPath, + // replacement: "", + // paths: [coverageFile], + // sillent: true + // }); // para cada pasta executa o remap do coverage que está apontando para os arquivos js // para apontar para os arquivos Typecript // gerando dois reports: JSON e HTML - remapIstanbul(coverageFile, - { - "basePath": "./src/", - "json": path.join(coverageFolder, "coverage-final-remaped.json"), - "html": path.join(coverageFolder) - }); + // remapIstanbul(coverageFile, + // { + // "exclude": + // "json": path.join(coverageFolder, "coverage-final-remaped.json") + // }); + + // replace({ + // regex: "src/webpack:/", + // replacement: "", + // paths: [coverageFile], + // sillent: true + // }); + + var loadCoverage = require('remap-istanbul/lib/loadCoverage'); + var remap = require('remap-istanbul/lib/remap'); + var writeReport = require('remap-istanbul/lib/writeReport'); + + var collector = remap(loadCoverage(coverageFile), { + exclude: 'Reflect', + /*readFile: function(filePath): any { + var pathNormalized = filePath.replace("webpack:///./src/", ""); + pathNormalized = pathNormalized.replace(/\.ts\?(\w+)"/, ".ts\""); + console.log("FILE PATH: ", pathNormalized); + if (!fs.existsSync(pathNormalized)) { + console.warn(new Error('Could not find file: "' + pathNormalized + '"')); + return ''; + } + return fs.readFileSync(pathNormalized); + }*/ + }); + + var Store = require("istanbul").Store; + var store = Store.create("fslookup"); + store.get = function (key) { + var pathNormalized = key.replace("src/webpack:/", ""); + console.error("PATH >>> ", pathNormalized); + pathNormalized = pathNormalized.replace(/\.ts\?(\w+)/, ".ts"); + console.log("my store got called!", key, pathNormalized); + return fs.readFileSync(pathNormalized, 'utf8'); + } + writeReport(collector, 'html', coverageFolder, store); + writeReport(collector, 'json', path.join(coverageFolder, 'coverage-final-remaped.json'), store).then(function() { + + /* do something else now */ + }); }); }); \ No newline at end of file diff --git a/karma.conf.js b/karma.conf.js index aed6f8d..c624729 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -7,8 +7,8 @@ var conf = require('./gulp/conf'); var argv = require("yargs").argv; var singleRun = (argv.singleRun !== undefined && argv.singleRun); -var coverage = (argv.coverage === undefined || argv.coverage); - +var coverage = (argv.coverage === undefined || argv.coverage); + if (argv.singleRun) { singleRun = true; @@ -16,6 +16,7 @@ if (argv.singleRun) { var projectFiles = [ './src/commons.js', + './src/vendor.bundle.js', './src/noosfero.js', './src/noosfero-specs.js' ]; @@ -28,18 +29,19 @@ var karmaPlugins = [ 'karma-jasmine', 'karma-spec-reporter', 'karma-ng-html2js-preprocessor', - 'karma-sourcemap-loader' + 'karma-sourcemap-loader', + 'karma-coverage' ]; -var karmaReporters = ['spec']; +var karmaReporters = ['spec', 'coverage']; -if (coverage) { - karmaPlugins.push('karma-coverage'); - karmaReporters.push('coverage'); -} +// if (coverage) { +// karmaPlugins.push('karma-coverage'); +// karmaReporters.push('coverage'); +// } @@ -88,7 +90,7 @@ module.exports = function (config) { var configuration = { basePath: '../angular-theme', - + files: listFiles(), singleRun: singleRun, @@ -155,13 +157,15 @@ module.exports = function (config) { // It was not possible to do it there because karma doesn't let us now if we are // running a single test or not configuration.preprocessors = { - 'src/noosfero.js': ['sourcemap', 'coverage'] + 'src/noosfero.js': ['sourcemap', 'coverage'], + 'src/**/*.ts': ['sourcemap'] + }; configuration.coverageReporter = { dir: 'coverage/', reporters: [ - /*{ type: 'html' },*/ + { type: 'html' }, { type: 'json', file: 'coverage-final.json' }, { type: 'text-summary' } ] @@ -172,12 +176,21 @@ module.exports = function (config) { // It was not possible to do it there because karma doesn't let us now if we are // running a single test or not configuration.preprocessors = { - 'src/noosfero.js': ['sourcemap'], + 'src/noosfero': ['coverage', 'sourcemap'], 'src/**/*.ts': ['sourcemap'] }; + + configuration.coverageReporter = { + dir: 'coverage/', + reporters: [ + { type: 'html' }, + { type: 'json', file: 'coverage-final.json' }, + { type: 'text-summary' } + ] + }; } - - + + pathSrcHtml.forEach(function (path) { configuration.preprocessors[path] = ['ng-html2js']; }); diff --git a/package.json b/package.json index 69500ff..dbcfc08 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "moment": "^2.11.2" }, "scripts": { - "coverage": "karma start --single-run & npm run remap-coverage", + "coverage": "karma start --single-run && npm run remap-coverage", "remap-coverage": "ts-node --project ./dev-scripts ./dev-scripts/remapCoverage.ts", "test-single": "karma start --single-run", "test-and-coverage": "karma start & npm run remap-coverage", @@ -52,7 +52,7 @@ "gulp-useref": "~1.3.0", "gulp-util": "~3.0.6", "http-proxy-middleware": "~0.9.0", - "istanbul": "^1.0.0-alpha.2", + "istanbul": "^0.4.2", "karma": "~0.13.10", "karma-angular-filesort": "~1.0.0", "karma-chrome-launcher": "^0.2.2", @@ -71,7 +71,7 @@ "phantomjs": "~1.9.18", "phantomjs-polyfill": "0.0.2", "reflect-metadata": "^0.1.3", - "remap-istanbul": "^0.5.1", + "remap-istanbul": "github:sitepen/remap-istanbul", "replace": "^0.3.0", "ts-loader": "^0.8.1", "ts-node": "^0.5.5", diff --git a/src/app/components/navbar/navbar.spec.ts b/src/app/components/navbar/navbar.spec.ts index 20ecbed..62ea059 100644 --- a/src/app/components/navbar/navbar.spec.ts +++ b/src/app/components/navbar/navbar.spec.ts @@ -5,7 +5,7 @@ provideEmptyObjects } from "./../../../spec/helpers"; import { Navbar -} from "./"; +} from "./navbar"; import { AUTH_EVENTS } from "./../auth"; diff --git a/src/app/components/noosfero-activities/activities.component.ts b/src/app/components/noosfero-activities/activities.component.ts new file mode 100644 index 0000000..9bdcf71 --- /dev/null +++ b/src/app/components/noosfero-activities/activities.component.ts @@ -0,0 +1,13 @@ +(function() { + 'use strict'; + + angular + .module('noosferoApp') + .component('noosferoActivities', { + bindings: { + activities: '<' + }, + templateUrl: 'app/components/noosfero-activities/activities.html' + }); + +})(); diff --git a/src/app/components/noosfero-articles/article/article_view.spec.ts b/src/app/components/noosfero-articles/article/article_view.spec.ts index f793be7..35d1925 100644 --- a/src/app/components/noosfero-articles/article/article_view.spec.ts +++ b/src/app/components/noosfero-articles/article/article_view.spec.ts @@ -2,7 +2,7 @@ import {Input, provide, Component} from 'ng-forward'; import {ArticleView, ArticleDefaultView} from './article_view'; -import {createComponentFromClass, quickCreateComponent} from "../../../../spec/helpers.ts"; +import {createComponentFromClass, quickCreateComponent} from "../../../../spec/helpers"; // this htmlTemplate will be re-used between the container components in this spec file const htmlTemplate: string = ''; diff --git a/src/app/components/noosfero/noosfero-template.filter.ts b/src/app/components/noosfero/noosfero-template.filter.ts new file mode 100644 index 0000000..42073b4 --- /dev/null +++ b/src/app/components/noosfero/noosfero-template.filter.ts @@ -0,0 +1,13 @@ +(function() { + 'use strict'; + angular + .module("noosferoApp") + .filter("noosferoTemplate", function() { + return function(text, options) { + for(var option in options) { + text = text.replace('{'+option+'}', options[option]); + } + return text; + } + }) +})(); diff --git a/src/app/components/noosfero/profile-image/profile-image.component.ts b/src/app/components/noosfero/profile-image/profile-image.component.ts new file mode 100644 index 0000000..ac877b6 --- /dev/null +++ b/src/app/components/noosfero/profile-image/profile-image.component.ts @@ -0,0 +1,21 @@ +(function() { + 'use strict'; + + angular + .module('noosferoApp') + .component('noosferoProfileImage', { + templateUrl: 'app/components/noosfero/profile-image/profile-image.html', + bindings: { + profile: '<' + }, + controller: ProfileImageController + }); + + /** @ngInject */ + function ProfileImageController() { + var vm = this; + vm.defaultIcon = 'fa-users'; + if(vm.profile && vm.profile.type==='Person') vm.defaultIcon = 'fa-user'; + } + +})(); diff --git a/src/app/index.ts b/src/app/index.ts index 7419460..1d48905 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -1,6 +1,5 @@ -import "core-js/shim"; -import "reflect-metadata"; + import {NoosferoApp} from "./index.module"; import {noosferoModuleConfig} from "./index.config"; import {noosferoAngularRunBlock} from "./index.run"; @@ -19,7 +18,7 @@ import {bootstrap, bundle} from "ng-forward"; import {AUTH_EVENTS} from "./components/auth/auth_events"; import {AuthController} from "./components/auth/auth_controller"; -import {Navbar} from "./components/navbar"; +import {Navbar} from "./components/navbar/navbar"; declare var moment: any; diff --git a/src/app/main/main.component.ts b/src/app/main/main.component.ts index c15a75d..142e078 100644 --- a/src/app/main/main.component.ts +++ b/src/app/main/main.component.ts @@ -1,5 +1,5 @@ import {bundle, Component, StateConfig} from "ng-forward"; -import {NoosferoArticleBlog} from "./../components/noosfero-articles/blog/blog.component.ts"; +import {NoosferoArticleBlog} from "./../components/noosfero-articles/blog/blog.component"; import {ArticleView} from "../components/noosfero-articles/article/article_view"; @@ -16,7 +16,7 @@ import {AuthService} from "./../components/auth/auth_service"; import {Session} from "./../components/auth/session"; -import {Navbar} from "../components/navbar"; +import {Navbar} from "../components/navbar/navbar"; import {MainBlock} from "../components/noosfero-blocks/main-block/main-block.component"; diff --git a/src/spec/helpers.ts b/src/spec/helpers.ts index 898ded6..3c8ebee 100644 --- a/src/spec/helpers.ts +++ b/src/spec/helpers.ts @@ -1,6 +1,5 @@ import {ngClass, TestComponentBuilder, ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; -import {quickFixture} from 'ng-forward/cjs/tests/utils'; import {Provider, Input, provide, Component} from 'ng-forward'; import {User, Person} from "./../app/models/interfaces"; diff --git a/src/specs.ts b/src/specs.ts index 238695c..7a8f68c 100644 --- a/src/specs.ts +++ b/src/specs.ts @@ -1,7 +1,7 @@ -require("core-js/shim"); -require("reflect-metadata"); -require("ng-forward"); +// require("core-js/shim"); +// require("reflect-metadata"); +// require("ng-forward"); // require all spec files diff --git a/webpack.config.js b/webpack.config.js index b45ec1d..145018f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -13,7 +13,7 @@ if (argv.production) { extension = ".min.js" } -var testFiles = glob.sync("./src/**/*.[sS]pec.ts"); +var testFiles = glob.sync("./src/**/**/*.[sS]pec.ts"); var uglifyLoaderConfig = { // I want to uglify with mangling only app files, not thirdparty libs @@ -22,16 +22,27 @@ var uglifyLoaderConfig = { loader: "uglify" }; -var testingFiles = glob.sync("./src/app/**/*.[sS]pec.ts"); +var testingFiles = glob.sync("./src/app/**/**/*.[sS]pec.ts"); + +var entries = { + noosfero: './src/app/index.ts', + 'noosfero-specs': testFiles,// './src/specs.ts', + 'vendor.bundle': ['core-js', 'reflect-metadata', 'ng-forward', 'ng-forward/cjs/testing/test-component-builder'] +}; + + +// if (argv.test) { +// entries = { +// 'noosfero-src': './src/app/index.ts', +// 'noosfero-specs': testFiles,// './src/specs.ts', +// 'vendor.bundle': ['core-js', 'reflect-metadata', 'ng-forward', 'ng-forward/cjs/testing/test-component-builder'] +// }; +// } var webpackConfig = { - watchDelay: 300, - entry: { - noosfero: './src/app/index.ts', - 'noosfero-specs': './src/specs.ts' - }, + entry: entries, - plugins: [new CommonsChunkPlugin("commons.js")], + plugins: [new CommonsChunkPlugin("commons", "commons.js")], output: { path: path.join(__dirname, "src"), -- libgit2 0.21.2