From c90c711fc51dfd2cc731144f84d0f9942dd91957 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Thu, 15 May 2014 15:05:44 +0200 Subject: [PATCH] SONAR-5209 Filter lines by coverage --- .../coffee/component-viewer/header.coffee | 11 ++++ .../main/coffee/component-viewer/main.coffee | 62 ++++++++++++++++--- .../coffee/component-viewer/source.coffee | 25 +++----- .../header/_coverage-header.hbs | 24 +++++-- 4 files changed, 93 insertions(+), 29 deletions(-) diff --git a/sonar-server/src/main/coffee/component-viewer/header.coffee b/sonar-server/src/main/coffee/component-viewer/header.coffee index 322787ef0f6..9e2d5140327 100644 --- a/sonar-server/src/main/coffee/component-viewer/header.coffee +++ b/sonar-server/src/main/coffee/component-viewer/header.coffee @@ -27,6 +27,9 @@ define [ 'click .js-toggle-duplications': 'toggleDuplications' 'click .js-toggle-scm': 'toggleSCM' + 'click .js-filter-line-to-cover': 'filterByLinesToCover' + 'click .js-filter-uncovered-lines': 'filterByUncoveredLines' + initialize: (options) -> # @listenTo options.main.settings, 'change', @changeSettings @@ -84,6 +87,14 @@ define [ @toggleSetting e, @options.main.showWorkspace, @options.main.hideWorkspace + filterByLinesToCover: -> + @options.main.filterLinesByLinesToCover() + + + filterByUncoveredLines: -> + @options.main.filterLinesByUncoveredLines() + + serializeData: -> component = @options.main.component.toJSON() if component.measures diff --git a/sonar-server/src/main/coffee/component-viewer/main.coffee b/sonar-server/src/main/coffee/component-viewer/main.coffee index 93d936e0729..f5ec52ee89e 100644 --- a/sonar-server/src/main/coffee/component-viewer/main.coffee +++ b/sonar-server/src/main/coffee/component-viewer/main.coffee @@ -17,11 +17,15 @@ define [ ) -> $ = jQuery + API_COMPONENT = "#{baseUrl}/api/sources/app" API_SOURCES = "#{baseUrl}/api/sources/show" API_COVERAGE = "#{baseUrl}/api/coverage/show" API_SCM = "#{baseUrl}/api/sources/scm" + LINES_AROUND_ISSUE = 4 + LINES_AROUND_COVERED_LINE = 1 + class ComponentViewer extends Marionette.Layout @@ -86,18 +90,12 @@ define [ $.get API_SCM, key: key, (data) => @source.set scm: data.scm + requestCoverage: (key) -> $.get API_COVERAGE, key: key, (data) => @source.set coverage: data.coverage - extractIssues: (data) -> - issuesMeasures = {} - data[0].msr.forEach (q) -> - issuesMeasures[q.key] = q.frmt_val - @component.set 'issuesMeasures', issuesMeasures - - open: (key) -> @workspace.reset [ key: key ] @_open key @@ -124,7 +122,6 @@ define [ @requestCoverage(@key).done => @sourceView.render() else @sourceView.render() - @sourceView.render() hideCoverage: -> @@ -146,7 +143,9 @@ define [ @settings.set 'issues', true if _.isArray(issues) && issues.length > 0 @source.set 'issues', issues - @sourceView.render() + @filterLinesByIssues() + else + @sourceView.render() hideIssues: -> @@ -177,6 +176,51 @@ define [ @sourceView.render() + filterLinesByIssues: -> + issues = @source.get 'issues' + @sourceView.resetShowBlocks() + issues.forEach (issue) => + line = issue.line || 0 + @sourceView.addShowBlock line - LINES_AROUND_ISSUE, line + LINES_AROUND_ISSUE + @sourceView.render() + + + filterLinesByLinesToCover: -> + unless @source.has 'coverage' + @requestCoverage(@key).done => @_filterLinesByLinesToCover() + else + @_filterLinesByLinesToCover() + + + _filterLinesByLinesToCover: -> + coverage = @source.get 'coverage' + @settings.set 'coverage', true + @sourceView.resetShowBlocks() + coverage.forEach (c) => + if c[1]? && c[1] + line = c[0] + @sourceView.addShowBlock line - LINES_AROUND_COVERED_LINE, line + LINES_AROUND_COVERED_LINE + @sourceView.render() + + + filterLinesByUncoveredLines: -> + unless @source.has 'coverage' + @requestCoverage(@key).done => @_filterLinesByUncoveredLines() + else + @_filterLinesByUncoveredLines() + + + _filterLinesByUncoveredLines: -> + coverage = @source.get 'coverage' + @settings.set 'coverage', true + @sourceView.resetShowBlocks() + coverage.forEach (c) => + if c[1]? && !c[1] + line = c[0] + @sourceView.addShowBlock line - LINES_AROUND_COVERED_LINE, line + LINES_AROUND_COVERED_LINE + @sourceView.render() + + addTransition: (key, transition, optionsForCurrent, options) -> if optionsForCurrent? last = @workspace.at(@workspace.length - 1) diff --git a/sonar-server/src/main/coffee/component-viewer/source.coffee b/sonar-server/src/main/coffee/component-viewer/source.coffee index 736ad552ae9..b5b01020a8b 100644 --- a/sonar-server/src/main/coffee/component-viewer/source.coffee +++ b/sonar-server/src/main/coffee/component-viewer/source.coffee @@ -47,6 +47,14 @@ define [ @showBlocks = [] + resetShowBlocks: -> + @showBlocks = [] + + + addShowBlock: (from, to) -> + @showBlocks.push from: from, to: to + + onRender: -> @delegateEvents() @showSettings = false @@ -187,23 +195,8 @@ define [ source.forEach (sourceLine) => show = false line = sourceLine.lineNumber - @showBlocks.forEach (block) -> - if block.from <= line && block.to >= line - show = true - - if @options.main.settings.get('issues') && !show - @model.get('issues')?.forEach (issue) -> - currentLine = issue.line || 0 - if (currentLine - LINES_AROUND_ISSUE) <= line && (currentLine + LINES_AROUND_ISSUE) >= line - show = true - - if @options.main.settings.get('coverage') && !show - @model.get('coverage')?.forEach (s) -> - currentLine = s[0] - if (currentLine - LINES_AROUND_COVERED_LINE) <= line && (currentLine + LINES_AROUND_COVERED_LINE) >= line - show = true - + show = true if block.from <= line && block.to >= line _.extend sourceLine, show: show source diff --git a/sonar-server/src/main/hbs/component-viewer/header/_coverage-header.hbs b/sonar-server/src/main/hbs/component-viewer/header/_coverage-header.hbs index 5f380f26c46..02fd444f3eb 100644 --- a/sonar-server/src/main/hbs/component-viewer/header/_coverage-header.hbs +++ b/sonar-server/src/main/hbs/component-viewer/header/_coverage-header.hbs @@ -2,13 +2,25 @@
Unit Tests
@@ -20,8 +32,12 @@ 47.2%
  • - Branch Coverage - 25% + Lines to cover + 171 +
  • +
  • + Uncovered lines + 16
  • \ No newline at end of file -- 2.39.5