'click .js-filter-covered-lines': 'filterByCoveredLines'
'click .js-filter-uncovered-lines': 'filterByUncoveredLines'
'click .js-filter-branches-to-cover': 'filterByBranchesToCover'
+ 'click .js-filter-covered-branches': 'filterByCoveredBranches'
'click .js-filter-uncovered-branches': 'filterByUncoveredBranches'
'click .js-filter-lines-to-cover-it': 'filterByLinesToCoverIT'
'click .js-filter-covered-lines-it': 'filterByCoveredLinesIT'
'click .js-filter-uncovered-lines-it': 'filterByUncoveredLinesIT'
'click .js-filter-branches-to-cover-it': 'filterByBranchesToCoverIT'
+ 'click .js-filter-covered-branches-it': 'filterByCoveredBranchesIT'
'click .js-filter-uncovered-branches-it': 'filterByUncoveredBranchesIT'
scope = el.data 'scope'
@ui.expandedBars.hide()
if scope
- @ui.expandedBars.filter("[data-scope=#{scope}]").show()
+ unless @options.main.component.has 'msr'
+ @options.main.requestMeasures(@options.main.key).done =>
+ @render()
+ @ui.expandedBars.filter("[data-scope=#{scope}]").show()
+ else
+ @ui.expandedBars.filter("[data-scope=#{scope}]").show()
changeSettings: ->
filterByCoveredLines: (e) -> @filterByCoverage e, 'filterByCoveredLines'
filterByUncoveredLines: (e) -> @filterByCoverage e, 'filterByUncoveredLines'
filterByBranchesToCover: (e) -> @filterByCoverage e, 'filterByBranchesToCover'
+ filterByCoveredBranches: (e) -> @filterByCoverage e, 'filterByCoveredBranches'
filterByUncoveredBranches: (e) -> @filterByCoverage e, 'filterByUncoveredBranches'
filterByLinesToCoverIT: (e) -> @filterByCoverage e, 'filterByLinesToCoverIT'
filterByCoveredLinesIT: (e) -> @filterByCoverage e, 'filterByCoveredLinesIT'
filterByUncoveredLinesIT: (e) -> @filterByCoverage e, 'filterByUncoveredLinesIT'
filterByBranchesToCoverIT: (e) -> @filterByCoverage e, 'filterByBranchesToCoverIT'
+ filterByCoveredBranchesIT: (e) -> @filterByCoverage e, 'filterByCoveredBranchesIT'
filterByUncoveredBranchesIT: (e) -> @filterByCoverage e, 'filterByUncoveredBranchesIT'
API_SOURCES = "#{baseUrl}/api/sources/show"
API_COVERAGE = "#{baseUrl}/api/coverage/show"
API_SCM = "#{baseUrl}/api/sources/scm"
+ API_MEASURES = "#{baseUrl}/api/resources"
LINES_AROUND_ISSUE = 4
LINES_AROUND_COVERED_LINE = 1
+ SOURCE_METRIC_LIST = 'lines,ncloc,functions,accessors,classes,statements,complexity,function_complexity,' +
+ 'comment_lines_density,comment_lines,public_documented_api_density,public_undocumented_api,' +
+ 'public_api'
+
+ COVERAGE_METRIC_LIST = 'coverage,line_coverage,lines_to_cover,covered_lines,uncovered_lines,' +
+ 'branch_coverage,conditions_to_cover,uncovered_conditions,' +
+ 'it_coverage,it_line_coverage,it_lines_to_cover,it_covered_lines,it_uncovered_lines,' +
+ 'it_branch_coverage,it_conditions_to_cover,it_uncovered_conditions'
+
+ ISSUES_METRIC_LIST = 'blocker_violations,critical_violations,major_violations,minor_violations,info_violations'
+
+ DUPLICATIONS_METRIC_LIST = 'duplicated_lines_density,duplicated_blocks,duplicated_files,duplicated_lines'
+
class ComponentViewer extends Marionette.Layout
@component.set data
+ requestMeasures: (key) ->
+ metrics = [SOURCE_METRIC_LIST, COVERAGE_METRIC_LIST, ISSUES_METRIC_LIST, DUPLICATIONS_METRIC_LIST].join ','
+ $.get API_MEASURES, resource: key, metrics: metrics, (data) =>
+ measuresList = data[0].msr || []
+ measures = {}
+ measuresList.forEach (m) -> measures[m.key] = m.frmt_val
+
+ if measures['lines_to_cover']? && measures['uncovered_lines']?
+ measures['covered_lines'] = measures['lines_to_cover'] - measures['uncovered_lines']
+
+ if measures['conditions_to_cover']? && measures['uncovered_conditions']?
+ measures['covered_conditions'] = measures['conditions_to_cover'] - measures['uncovered_conditions']
+
+ if measures['it_lines_to_cover']? && measures['it_uncovered_lines']?
+ measures['it_covered_lines'] = measures['it_lines_to_cover'] - measures['it_uncovered_lines']
+
+ if measures['it_conditions_to_cover']? && measures['it_uncovered_conditions']?
+ measures['it_covered_conditions'] = measures['it_conditions_to_cover'] - measures['it_uncovered_conditions']
+
+ @component.set 'msr', measures
+
+
requestSource: (key) ->
$.get API_SOURCES, key: key, (data) =>
@source.set source: data.sources
# Unit Tests
filterByLinesToCover: -> @filterByCoverage (c) -> c[1]?
filterByCoveredLines: -> @filterByCoverage (c) -> c[1]? && c[1]
- filterLinesByUncoveredLines: -> @filterByCoverage (c) -> c[1]? && !c[1]
+ filterByUncoveredLines: -> @filterByCoverage (c) -> c[1]? && !c[1]
filterByBranchesToCover: -> @filterByCoverage (c) -> c[3]?
+ filterByCoveredBranches: -> @filterByCoverage (c) -> c[3]? && c[4]? && (c[4] > 0)
filterByUncoveredBranches: -> @filterByCoverage (c) -> c[3]? && c[4]? && (c[3] > c[4])
# Integration Tests
filterByLinesToCoverIT: -> @filterByCoverageIT (c) -> c[1]?
filterByCoveredLinesIT: -> @filterByCoverageIT (c) -> c[1]? && c[1]
- filterLinesByUncoveredLinesIT: -> @filterByCoverageIT (c) -> c[1]? && !c[1]
+ filterByUncoveredLinesIT: -> @filterByCoverageIT (c) -> c[1]? && !c[1]
filterByBranchesToCoverIT: -> @filterByCoverageIT (c) -> c[3]?
+ filterByCoveredBranchesIT: -> @filterByCoverageIT (c) -> c[3]? && c[4]? && (c[4] > 0)
filterByUncoveredBranchesIT: -> @filterByCoverageIT (c) -> c[3]? && c[4]? && (c[3] > c[4])
<ul class="component-viewer-header-expanded-bar-section-list">
<li><span class="item">
<span class="label">Coverage</span>
- <span class="number">93.6%</span>
+ <span class="number">{{component.msr.coverage}}</span>
</span></li>
<li><span class="item">
<span class="label">Line coverage</span>
- <span class="number">93.6%</span>
+ <span class="number">{{component.msr.line_coverage}}</span>
</span></li>
<li><a class="item js-filter-lines-to-cover">
<span class="label">Lines to cover</span>
- <span class="number">171</span>
- <i class="icon-chevron-right"></i>
- </a></li>
- <li><a class="item js-filter-uncovered-lines">
- <span class="label">Uncovered lines</span>
- <span class="number">16</span>
+ <span class="number">{{component.msr.lines_to_cover}}</span>
<i class="icon-chevron-right"></i>
</a></li>
<li><a class="item js-filter-covered-lines">
<span class="label">Covered lines</span>
- <span class="number">55</span>
+ <span class="number">{{component.msr.covered_lines}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ <li><a class="item js-filter-uncovered-lines">
+ <span class="label">Uncovered lines</span>
+ <span class="number">{{component.msr.uncovered_lines}}</span>
<i class="icon-chevron-right"></i>
</a></li>
</ul>
<li><span class="item"> </span></li>
<li><span class="item">
<span class="label">Branch coverage</span>
- <span class="number">75.0%</span>
+ <span class="number">{{component.msr.branch_coverage}}</span>
</span></li>
<li><a class="item js-filter-branches-to-cover">
<span class="label">Branches to cover</span>
- <span class="number">16</span>
+ <span class="number">{{component.msr.conditions_to_cover}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ <li><a class="item js-filter-covered-branches">
+ <span class="label">Covered branches</span>
+ <span class="number">{{component.msr.covered_conditions}}</span>
<i class="icon-chevron-right"></i>
</a></li>
<li><a class="item js-filter-uncovered-branches">
<span class="label">Uncovered branches</span>
- <span class="number">4</span>
+ <span class="number">{{component.msr.uncovered_conditions}}</span>
<i class="icon-chevron-right"></i>
</a></li>
</ul>
<div class="component-viewer-header-expanded-bar-section">
- <div class="component-viewer-header-expanded-bar-section-title">Unit Tests</div>
+ <div class="component-viewer-header-expanded-bar-section-title">Integration Tests</div>
<ul class="component-viewer-header-expanded-bar-section-list">
<li><span class="item">
<span class="label">Coverage</span>
- <span class="number">93.6%</span>
+ <span class="number">{{component.msr.it_coverage}}</span>
</span></li>
<li><span class="item">
<span class="label">Line coverage</span>
- <span class="number">93.6%</span>
+ <span class="number">{{component.msr.it_line_coverage}}</span>
</span></li>
<li><a class="item js-filter-lines-to-cover-it">
<span class="label">Lines to cover</span>
- <span class="number">171</span>
- <i class="icon-chevron-right"></i>
- </a></li>
- <li><a class="item js-filter-uncovered-lines-it">
- <span class="label">Uncovered lines</span>
- <span class="number">16</span>
+ <span class="number">{{component.msr.it_lines_to_cover}}</span>
<i class="icon-chevron-right"></i>
</a></li>
<li><a class="item js-filter-covered-lines-it">
<span class="label">Covered lines</span>
- <span class="number">55</span>
+ <span class="number">{{component.msr.it_covered_lines}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ <li><a class="item js-filter-uncovered-lines-it">
+ <span class="label">Uncovered lines</span>
+ <span class="number">{{component.msr.it_uncovered_lines}}</span>
<i class="icon-chevron-right"></i>
</a></li>
</ul>
<li><span class="item"> </span></li>
<li><span class="item">
<span class="label">Branch coverage</span>
- <span class="number">75.0%</span>
+ <span class="number">{{component.msr.it_branch_coverage}}</span>
</span></li>
<li><a class="item js-filter-branches-to-cover-it">
<span class="label">Branches to cover</span>
- <span class="number">16</span>
+ <span class="number">{{component.msr.it_conditions_to_cover}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ <li><a class="item js-filter-covered-branches-it">
+ <span class="label">Covered branches</span>
+ <span class="number">{{component.msr.it_covered_conditions}}</span>
<i class="icon-chevron-right"></i>
</a></li>
<li><a class="item js-filter-uncovered-branches-it">
<span class="label">Uncovered branches</span>
- <span class="number">4</span>
+ <span class="number">{{component.msr.it_uncovered_conditions}}</span>
<i class="icon-chevron-right"></i>
</a></li>
</ul>