]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3513 Sort unit tests based on name or execution time
authorStas Vilchik <vilchiks@gmail.com>
Fri, 18 Jul 2014 09:45:56 +0000 (15:45 +0600)
committerStas Vilchik <vilchiks@gmail.com>
Fri, 18 Jul 2014 09:46:06 +0000 (15:46 +0600)
server/sonar-web/src/main/coffee/component-viewer/header/tests-header.coffee
server/sonar-web/src/main/hbs/component-viewer/header/tests-header.hbs
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index cb8b4832ab07565ca59b336aae761e50671a23c6..d297e53bc3555e0413e10ff3f471fb2a4b3b259b 100644 (file)
@@ -24,11 +24,20 @@ define [
 
     events:
       'click @ui.unitTests': 'showCoveredFiles'
+      'click .js-sort-tests-duration': 'sortTestsByDuration'
+      'click .js-sort-tests-name': 'sortTestsByName'
+
+
+    initialize: ->
+      super
+      @tests = _.sortBy @component.get('tests'), 'name'
+      @activeSort = '.js-sort-tests-name'
 
 
     onRender: ->
       @header.enableUnitTest = (testName) =>
         @ui.unitTests.filter("[data-name=#{testName}]").click()
+      @$(@activeSort).addClass 'active-link' if @activeSort
 
 
     onClose: ->
@@ -50,6 +59,18 @@ define [
         popup.render()
 
 
+    sortTestsByDuration: ->
+      @activeSort = '.js-sort-tests-duration'
+      @tests = _.sortBy @tests, 'durationInMs'
+      @render()
+
+
+    sortTestsByName: ->
+      @activeSort = '.js-sort-tests-name'
+      @tests = _.sortBy @tests, 'name'
+      @render()
+
+
     hasCoveragePerTestData: ->
       hasData = false
       @component.get('tests').forEach (test) ->
@@ -59,4 +80,5 @@ define [
 
     serializeData: ->
       _.extend super,
+        tests: @tests
         hasCoveragePerTestData: @hasCoveragePerTestData()
index a894e1ffea221362242fd6e0f161c878b594d7dc..0b8659bb2a6e3f1e3b1d31d45a9f215ebf7e0beb 100644 (file)
@@ -50,7 +50,7 @@
     {{/if}}
   </div>
   <ul class="component-viewer-header-expanded-bar-section-list">
-    {{#each component.tests}}
+    {{#each tests}}
       {{#eq status 'SKIPPED'}}
         <li><span class="item" title="{{name}}" data-status="{{status}}">
         <span class="label">{{testStatusIcon status}}
@@ -77,4 +77,9 @@
       {{/eq}}
     {{/each}}
   </ul>
+  <div class="component-viewer-header-expanded-bar-section-title">
+    <span>{{t 'component_viewer.tests.sort_by'}}</span>
+    <a class="js-sort-tests-name underlined-link">{{t 'component_viewer.tests.test_name'}}</a>
+    <a class="js-sort-tests-duration underlined-link">{{t 'component_viewer.tests.duration'}}</a>
+  </div>
 </div>
index 4b4952991e4fdbbf8121779887feb83a17fc94d6..54fc3f9b32c497998be7abe07509441acb021f6b 100644 (file)
@@ -2667,6 +2667,10 @@ component_viewer.transition.coverage=Covered By
 component_viewer.transition.covers=Covers
 component_viewer.transition.duplication=Duplicated By
 
+component_viewer.tests.sort_by=Sort by
+component_viewer.tests.duration=Duration
+component_viewer.tests.test_name=Test Name
+
 component_viewer.x_lines_are_covered={0} lines are covered
 component_viewer.details=Details
 component_viewer.add_manual_issue=Add Manual Issue