From 05769f8a49abda563726710aedf8b3ae7d455fc0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 16:44:35 -0800 Subject: [PATCH 01/29] :lipstick: One property per line --- static/jasmine.less | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/static/jasmine.less b/static/jasmine.less index 7c2084807..caf7ae509 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -20,8 +20,17 @@ body { list-style: none; } -#HTMLReporter { font-size: 11px; font-family: Monaco, Consolas, monospace; line-height: 1.6em; color: #333333; } -#HTMLReporter #jasmine_content { position: fixed; right: 100%; } +#HTMLReporter { + font-size: 11px; + font-family: Monaco, Consolas, monospace; + line-height: 1.6em; + color: #333333; +} + +#HTMLReporter #jasmine_content { + position: fixed; + right: 100%; +} #HTMLReporter .symbolHeader { background-color: #222; From cf73dd467a712b82534eee7d5f328d181a4155e1 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 16:48:29 -0800 Subject: [PATCH 02/29] Pad stack traces --- spec/atom-reporter.coffee | 4 ++-- static/jasmine.less | 23 ++++++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index b542e20e5..aef8c325c 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -16,7 +16,7 @@ formatStackTrace = (stackTrace) -> module.exports = class AtomReporter extends View @content: -> - @div id: 'HTMLReporter', class: 'jasmine_reporter', => + @div id: 'HTMLReporter', class: 'jasmine_reporter spec-reporter', => @div outlet: 'specPopup', class: "spec-popup" @div outlet: "suites" @div outlet: 'coreArea', => @@ -218,7 +218,7 @@ class SpecResultView extends View stackTrace = formatStackTrace(result.trace.stack) @specFailures.append $$ -> @div result.message, class: 'resultMessage fail' - @div stackTrace, class: 'stackTrace' if stackTrace + @div stackTrace, class: 'stack-trace padded' if stackTrace attach: -> @parentSuiteView().append this diff --git a/static/jasmine.less b/static/jasmine.less index caf7ae509..58bc7be40 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -166,15 +166,16 @@ body { font-size: 15px } -#HTMLReporter .stackTrace { - font-size: 12px; - padding: 5px; - margin: 5px 0 0 0; - border-radius: 2px; - line-height: 18px; - color: #666666; - border: 1px solid #ddd; - background: white; - white-space: pre; - overflow: auto; +.spec-reporter { + .stack-trace { + font-size: 12px; + margin: 5px 0 0 0; + border-radius: 2px; + line-height: 18px; + color: #666666; + border: 1px solid #ddd; + background: white; + white-space: pre; + overflow: auto; + } } From ecf4dbefe3efaf948599222149aa75915fd8f1af Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 16:59:30 -0800 Subject: [PATCH 03/29] Sanitize duplicate error and [object Object]. lines --- spec/atom-reporter.coffee | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index aef8c325c..2f67505a7 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -3,7 +3,7 @@ _ = require 'underscore-plus' {convertStackTrace} = require 'coffeestack' sourceMaps = {} -formatStackTrace = (stackTrace) -> +formatStackTrace = (message='', stackTrace) -> return stackTrace unless stackTrace jasminePattern = /^\s*at\s+.*\(?.*\/jasmine(-[^\/]*)?\.js:\d+:\d+\)?\s*$/ @@ -11,7 +11,19 @@ formatStackTrace = (stackTrace) -> for line in stackTrace.split('\n') convertedLines.push(line) unless jasminePattern.test(line) - convertStackTrace(convertedLines.join('\n'), sourceMaps) + stackTrace = convertStackTrace(convertedLines.join('\n'), sourceMaps) + lines = stackTrace.split('\n') + + # Remove first line of stack when it is the same as the error message + errorMatch = lines[0]?.match(/^Error: (.*)/) + lines.shift() if message.trim() is errorMatch?[1]?.trim() + + # Remove prefix of lines matching: at [object Object]. (path:1:2) + for line, index in lines + prefixMatch = line.match(/at \[object Object\]\. \(([^\)]+)\)/) + lines[index] = "at #{prefixMatch[1]}" if prefixMatch + + lines.join('\n') module.exports = class AtomReporter extends View @@ -215,7 +227,7 @@ class SpecResultView extends View @description.text @spec.description for result in @spec.results().getItems() when not result.passed() - stackTrace = formatStackTrace(result.trace.stack) + stackTrace = formatStackTrace(result.message, result.trace.stack) @specFailures.append $$ -> @div result.message, class: 'resultMessage fail' @div stackTrace, class: 'stack-trace padded' if stackTrace From 99c2c32e1e61e7af5a0548d7633b3fd27bf5ea73 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 17:06:35 -0800 Subject: [PATCH 04/29] Nest styles --- spec/atom-reporter.coffee | 2 +- static/jasmine.less | 251 ++++++++++++++++++++------------------ 2 files changed, 133 insertions(+), 120 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 2f67505a7..a5fe991eb 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -28,7 +28,7 @@ formatStackTrace = (message='', stackTrace) -> module.exports = class AtomReporter extends View @content: -> - @div id: 'HTMLReporter', class: 'jasmine_reporter spec-reporter', => + @div class: 'jasmine_reporter spec-reporter', => @div outlet: 'specPopup', class: "spec-popup" @div outlet: "suites" @div outlet: 'coreArea', => diff --git a/static/jasmine.less b/static/jasmine.less index 58bc7be40..d4f2c9d2e 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -20,153 +20,166 @@ body { list-style: none; } -#HTMLReporter { +.spec-reporter { font-size: 11px; font-family: Monaco, Consolas, monospace; line-height: 1.6em; color: #333333; -} -#HTMLReporter #jasmine_content { - position: fixed; - right: 100%; -} + #jasmine_content { + position: fixed; + right: 100%; + } -#HTMLReporter .symbolHeader { - background-color: #222; - color: #c2c2c2; - font-size: 12px; - margin: 0; - padding: 5px 2px 2px 2px; -} + .symbolHeader { + background-color: #222; + color: #c2c2c2; + font-size: 12px; + margin: 0; + padding: 5px 2px 2px 2px; + } -#HTMLReporter .symbolSummary { - background-color: #222; - overflow: hidden; - margin: 0; -} + .symbolSummary { + background-color: #222; + overflow: hidden; + margin: 0; + } -#HTMLReporter .symbolSummary li { - float: left; - line-height: 10px; - height: 10px; - width: 10px; - font-size: 10px; -} + .symbolSummary li { + float: left; + line-height: 10px; + height: 10px; + width: 10px; + font-size: 10px; -#HTMLReporter .symbolSummary li.passed { color: #63AD75 } -#HTMLReporter .symbolSummary li.failed { color: #FF3F05 } -#HTMLReporter .symbolSummary li.skipped { color: #444 } -#HTMLReporter .symbolSummary li.pending { color: #111 } + &.passed { + color: #63AD75; + } -#HTMLReporter .symbolSummary li:before { content: "\02022"; } + &.failed { + color: #FF3F05; + } -#HTMLReporter .symbolSummary li:hover { - color: white; -} + &.skipped { + color: #444 + } -#HTMLReporter .status { - font-size: 20px; - color: #222; - background-color: #E5FFC0; - line-height: 2em; - padding: 2px; - border: 2px solid #222; - border-left: 0; - border-right: 0; - text-align: center; -} + &.pending { + color: #111; + } -#HTMLReporter .status.failed { - color: white; - background-color: rgba(204,51,63,1.0); -} + &:before { + content: "\02022"; + } -#HTMLReporter .status .spec-count { - float: left; -} + &:hover { + color: white; + } + } -#HTMLReporter .status .message { -} + .status { + font-size: 20px; + color: #222; + background-color: #E5FFC0; + line-height: 2em; + padding: 2px; + border: 2px solid #222; + border-left: 0; + border-right: 0; + text-align: center; -#HTMLReporter .status .time { - float: right; -} + &.failed { + color: white; + background-color: rgba(204,51,63,1.0); + } -#HTMLReporter .results .suite + .suite, #HTMLReporter .results .spec + .spec { - border-radius: 0; -} + .spec-count { + float: left; + } -#HTMLReporter .results .suite, #HTMLReporter .results .spec { - border: 2px solid #222; - border-radius: 7px 0 0 0; - border-right: none; - border-bottom: none; - padding: 5px; - padding-right: 0; - padding-bottom: 0; -} + .time { + float: right; + } + } -#HTMLReporter .results .suite:first-child { - border-radius: 0; - border: 2px solid #6A4A3C; - border-top: 0; - border-left: 0; - border-right: 0; -} + .results { + .suite + .suite, + .spec + .spec { + border-radius: 0; + } -#HTMLReporter .results .suite { - border: 2px solid #6A4A3C; - border-radius: 7px 0 0 0; - border-right: none; - border-bottom: none; - padding: 5px; - padding-right: 0; - padding-bottom: 0; - background-color:rgba(204,51,63,0.33); -} + .suite, + .spec { + border: 2px solid #222; + border-radius: 7px 0 0 0; + border-right: none; + border-bottom: none; + padding: 5px; + padding-right: 0; + padding-bottom: 0; + } -#HTMLReporter .results .spec { - padding: 10px; - background-color:rgba(204,51,63,1.0); -} + .suite:first-child { + border-radius: 0; + border: 2px solid #6A4A3C; + border-top: 0; + border-left: 0; + border-right: 0; + } -#HTMLReporter .results .suite > .suite, #HTMLReporter .results .suite > .spec { - margin-left: 5px -} + .suite { + border: 2px solid #6A4A3C; + border-radius: 7px 0 0 0; + border-right: none; + border-bottom: none; + padding: 5px; + padding-right: 0; + padding-bottom: 0; + background-color:rgba(204,51,63,0.33); + } -#HTMLReporter .results .description { - color: white; - font-size: 15px; - padding-bottom: 10px -} + .spec { + padding: 10px; + background-color:rgba(204,51,63,1.0); + } -#HTMLReporter .results .spec .spec-toggle { - font-family: Octicons Regular; - color: white; - font-size: 20px; - float: right; - cursor: pointer; - text-shadow: 3px 3px #222; - opacity: 0; -} + .suite > .suite, + .suite > .spec { + margin-left: 5px + } -#HTMLReporter .results .spec .spec-toggle:hover { - text-shadow: none; - padding-top: 3px; -} + .description { + color: white; + font-size: 15px; + padding-bottom: 10px + } -#HTMLReporter .results .spec:hover .spec-toggle { - opacity: 1; -} + .spec .spec-toggle { + font-family: Octicons Regular; + color: white; + font-size: 20px; + float: right; + cursor: pointer; + text-shadow: 3px 3px #222; + opacity: 0; + } -#HTMLReporter .resultMessage { - padding-top: 5px; - color: #fff; - font-size: 15px -} + .spec .spec-toggle:hover { + text-shadow: none; + padding-top: 3px; + } + + .spec:hover .spec-toggle { + opacity: 1; + } + } + + .resultMessage { + padding-top: 5px; + color: #fff; + font-size: 15px + } -.spec-reporter { .stack-trace { font-size: 12px; margin: 5px 0 0 0; From 91bd852812c6855bfd79551a4538cfa313581698 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 17:09:14 -0800 Subject: [PATCH 05/29] Use hyphen separated class names --- spec/atom-reporter.coffee | 14 +++++----- static/jasmine.less | 54 +++++++++++++++++++-------------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index a5fe991eb..f292c0c41 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -32,14 +32,14 @@ class AtomReporter extends View @div outlet: 'specPopup', class: "spec-popup" @div outlet: "suites" @div outlet: 'coreArea', => - @div outlet: 'coreHeader', class: 'symbolHeader' - @ul outlet: 'coreSummary', class: 'symbolSummary list-unstyled' + @div outlet: 'coreHeader', class: 'symbol-header' + @ul outlet: 'coreSummary', class: 'symbol-summary list-unstyled' @div outlet: 'bundledArea', => - @div outlet: 'bundledHeader', class: 'symbolHeader' - @ul outlet: 'bundledSummary', class: 'symbolSummary list-unstyled' + @div outlet: 'bundledHeader', class: 'symbol-header' + @ul outlet: 'bundledSummary', class: 'symbol-summary list-unstyled' @div outlet: 'userArea', => - @div outlet: 'userHeader', class: 'symbolHeader' - @ul outlet: 'userSummary', class: 'symbolSummary list-unstyled' + @div outlet: 'userHeader', class: 'symbol-header' + @ul outlet: 'userSummary', class: 'symbol-summary list-unstyled' @div outlet: "status", class: 'status', => @div outlet: "time", class: 'time' @div outlet: "specCount", class: 'spec-count' @@ -229,7 +229,7 @@ class SpecResultView extends View for result in @spec.results().getItems() when not result.passed() stackTrace = formatStackTrace(result.message, result.trace.stack) @specFailures.append $$ -> - @div result.message, class: 'resultMessage fail' + @div result.message, class: 'result-message fail' @div stackTrace, class: 'stack-trace padded' if stackTrace attach: -> diff --git a/static/jasmine.less b/static/jasmine.less index d4f2c9d2e..b7a30f5c7 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -31,7 +31,7 @@ body { right: 100%; } - .symbolHeader { + .symbol-header { background-color: #222; color: #c2c2c2; font-size: 12px; @@ -39,41 +39,41 @@ body { padding: 5px 2px 2px 2px; } - .symbolSummary { + .symbol-summary { background-color: #222; overflow: hidden; margin: 0; - } - .symbolSummary li { - float: left; - line-height: 10px; - height: 10px; - width: 10px; - font-size: 10px; + li { + float: left; + line-height: 10px; + height: 10px; + width: 10px; + font-size: 10px; - &.passed { - color: #63AD75; - } + &.passed { + color: #63AD75; + } - &.failed { - color: #FF3F05; - } + &.failed { + color: #FF3F05; + } - &.skipped { - color: #444 - } + &.skipped { + color: #444 + } - &.pending { - color: #111; - } + &.pending { + color: #111; + } - &:before { - content: "\02022"; - } + &:before { + content: "\02022"; + } - &:hover { - color: white; + &:hover { + color: white; + } } } @@ -174,7 +174,7 @@ body { } } - .resultMessage { + .result-message { padding-top: 5px; color: #fff; font-size: 15px From 89b240cd4f9a58ea4094796c7185e3f9fd83b16a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 17:52:24 -0800 Subject: [PATCH 06/29] Use pre element for stack traces --- spec/atom-reporter.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index f292c0c41..6608bea06 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -230,7 +230,7 @@ class SpecResultView extends View stackTrace = formatStackTrace(result.message, result.trace.stack) @specFailures.append $$ -> @div result.message, class: 'result-message fail' - @div stackTrace, class: 'stack-trace padded' if stackTrace + @pre stackTrace, class: 'stack-trace padded' if stackTrace attach: -> @parentSuiteView().append this From 919fafc7a436ae3d24beac22f2bd3577e5d2ccc9 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 17:52:42 -0800 Subject: [PATCH 07/29] Trim stack trace lines --- spec/atom-reporter.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 6608bea06..3cc1491b5 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -23,6 +23,7 @@ formatStackTrace = (message='', stackTrace) -> prefixMatch = line.match(/at \[object Object\]\. \(([^\)]+)\)/) lines[index] = "at #{prefixMatch[1]}" if prefixMatch + lines = lines.map (line) -> line.trim() lines.join('\n') module.exports = From 8b94fef8061f26b793c3ee228dd010f6bad7249a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 17:52:55 -0800 Subject: [PATCH 08/29] Use alert class for status area --- spec/atom-reporter.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 3cc1491b5..19ce17989 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -41,7 +41,7 @@ class AtomReporter extends View @div outlet: 'userArea', => @div outlet: 'userHeader', class: 'symbol-header' @ul outlet: 'userSummary', class: 'symbol-summary list-unstyled' - @div outlet: "status", class: 'status', => + @div outlet: "status", class: 'status alert alert-success', => @div outlet: "time", class: 'time' @div outlet: "specCount", class: 'spec-count' @div outlet: "message", class: 'message' @@ -128,7 +128,7 @@ class AtomReporter extends View updateStatusView: (spec) -> if @failedCount > 0 - @status.addClass('failed') unless @status.hasClass('failed') + @status.addClass('alert-danger').removeClass('alert-success') @updateSpecCounts() From 0d724bb00d1e2329c4989861991ab4b44de72dee Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 18:31:45 -0800 Subject: [PATCH 09/29] Drop colon suffix --- spec/atom-reporter.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 19ce17989..8a50d2ed8 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -158,15 +158,15 @@ class AtomReporter extends View @userSummary.append symbol if coreSpecs > 0 - @coreHeader.text("Core Specs (#{coreSpecs}):") + @coreHeader.text("Core Specs (#{coreSpecs})") else @coreArea.hide() if bundledPackageSpecs > 0 - @bundledHeader.text("Bundled Package Specs (#{bundledPackageSpecs}):") + @bundledHeader.text("Bundled Package Specs (#{bundledPackageSpecs})") else @bundledArea.hide() if userPackageSpecs > 0 - @userHeader.text("User Package Specs (#{userPackageSpecs}):") + @userHeader.text("User Package Specs (#{userPackageSpecs})") else @userArea.hide() From 1c51f512ea42d734dfeb90e74b4acaa4ea93a6ea Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 18:31:56 -0800 Subject: [PATCH 10/29] Add symbol-area class --- spec/atom-reporter.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 8a50d2ed8..a27f945f1 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -30,15 +30,15 @@ module.exports = class AtomReporter extends View @content: -> @div class: 'jasmine_reporter spec-reporter', => - @div outlet: 'specPopup', class: "spec-popup" + @div outlet: 'specPopup', class: "spec-popup alert alert-info" @div outlet: "suites" - @div outlet: 'coreArea', => + @div outlet: 'coreArea', class: 'symbol-area', => @div outlet: 'coreHeader', class: 'symbol-header' @ul outlet: 'coreSummary', class: 'symbol-summary list-unstyled' - @div outlet: 'bundledArea', => + @div outlet: 'bundledArea', class: 'symbol-area', => @div outlet: 'bundledHeader', class: 'symbol-header' @ul outlet: 'bundledSummary', class: 'symbol-summary list-unstyled' - @div outlet: 'userArea', => + @div outlet: 'userArea', class: 'symbol-area', => @div outlet: 'userHeader', class: 'symbol-header' @ul outlet: 'userSummary', class: 'symbol-summary list-unstyled' @div outlet: "status", class: 'status alert alert-success', => From 8be5f7d6c8d7fc4cc5ee1183d8f79d3bfd2bae4c Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 18:32:15 -0800 Subject: [PATCH 11/29] Use bootstrap to style spec reporter --- static/jasmine.less | 150 +++++++++++++++++--------------------------- 1 file changed, 56 insertions(+), 94 deletions(-) diff --git a/static/jasmine.less b/static/jasmine.less index b7a30f5c7..2a671d570 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -1,17 +1,14 @@ -@import "octicon-mixins.less"; +@import "octicon-mixins"; @font-face { .octicon-font(); } body { - background-color: #ddd; + background-color: #fff; padding: 0; } .spec-popup { position: absolute; - background-color: #ddd; - border: 2px solid black; - padding: 5px; font-size: 13px; display: none; } @@ -22,9 +19,8 @@ body { .spec-reporter { font-size: 11px; - font-family: Monaco, Consolas, monospace; line-height: 1.6em; - color: #333333; + color: #333; #jasmine_content { position: fixed; @@ -32,19 +28,24 @@ body { } .symbol-header { - background-color: #222; - color: #c2c2c2; font-size: 12px; margin: 0; - padding: 5px 2px 2px 2px; + padding-bottom: 5px; + } + + .symbol-area { + margin: 10px; + padding: 10px; + border: 1px solid #ddd; + border-radius: 2px; } .symbol-summary { - background-color: #222; overflow: hidden; margin: 0; li { + font-family: Monaco, Consolas, monospace; float: left; line-height: 10px; height: 10px; @@ -52,47 +53,35 @@ body { font-size: 10px; &.passed { - color: #63AD75; + color: #5cb85c; } &.failed { - color: #FF3F05; + color: #d9534f; } &.skipped { - color: #444 + color: #ddd; } &.pending { - color: #111; + color: #eee; } &:before { content: "\02022"; } - - &:hover { - color: white; - } } } .status { font-size: 20px; - color: #222; - background-color: #E5FFC0; line-height: 2em; - padding: 2px; - border: 2px solid #222; - border-left: 0; - border-right: 0; + padding: 5px; + border-radius: 0; + margin: 0; text-align: center; - &.failed { - color: white; - background-color: rgba(204,51,63,1.0); - } - .spec-count { float: left; } @@ -103,81 +92,56 @@ body { } .results { - .suite + .suite, - .spec + .spec { - border-radius: 0; + padding: 10px; + + .description { + font-size: 16px; + padding: 5px 0 5px 0; } - .suite, - .spec { - border: 2px solid #222; - border-radius: 7px 0 0 0; - border-right: none; - border-bottom: none; - padding: 5px; - padding-right: 0; - padding-bottom: 0; - } + > .suite { + > .description { + font-size: 18px; + font-weight: bold; + } - .suite:first-child { - border-radius: 0; - border: 2px solid #6A4A3C; - border-top: 0; - border-left: 0; - border-right: 0; - } - - .suite { - border: 2px solid #6A4A3C; - border-radius: 7px 0 0 0; - border-right: none; - border-bottom: none; - padding: 5px; - padding-right: 0; - padding-bottom: 0; - background-color:rgba(204,51,63,0.33); + margin-bottom: 20px; } .spec { - padding: 10px; - background-color:rgba(204,51,63,1.0); + margin-top: 5px; + padding: 0 10px 10px 10px; + border-left: 3px solid #d9534f; + + .spec-toggle { + font-family: Octicons Regular; + font-size: 20px; + float: right; + cursor: pointer; + opacity: 0; + color: #999; + } + + .spec-toggle:hover { + color: #333; + } + + &:hover .spec-toggle { + opacity: 1; + } } .suite > .suite, .suite > .spec { - margin-left: 5px - } - - .description { - color: white; - font-size: 15px; - padding-bottom: 10px - } - - .spec .spec-toggle { - font-family: Octicons Regular; - color: white; - font-size: 20px; - float: right; - cursor: pointer; - text-shadow: 3px 3px #222; - opacity: 0; - } - - .spec .spec-toggle:hover { - text-shadow: none; - padding-top: 3px; - } - - .spec:hover .spec-toggle { - opacity: 1; + margin-left: 10px; } } .result-message { - padding-top: 5px; - color: #fff; - font-size: 15px + font-size: 16px; + font-weight: bold; + color: #d9534f; + padding: 5px 0 5px 0; } .stack-trace { @@ -185,10 +149,8 @@ body { margin: 5px 0 0 0; border-radius: 2px; line-height: 18px; - color: #666666; + color: #666; border: 1px solid #ddd; - background: white; - white-space: pre; overflow: auto; } } From 6776fa4f0dcad56c36e6f0f7124a38417ee62d70 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 18:40:37 -0800 Subject: [PATCH 12/29] Remove border from symbol area --- static/jasmine.less | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/static/jasmine.less b/static/jasmine.less index 2a671d570..cb6f8370b 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -28,16 +28,14 @@ body { } .symbol-header { - font-size: 12px; + font-size: 16px; + font-weight: bold; margin: 0; - padding-bottom: 5px; + padding-bottom: 10px; } .symbol-area { - margin: 10px; padding: 10px; - border: 1px solid #ddd; - border-radius: 2px; } .symbol-summary { From fd005380b0bb6a246bd3f2990e26c59afe503cd8 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 18:40:49 -0800 Subject: [PATCH 13/29] Use package name in label --- spec/atom-reporter.coffee | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index a27f945f1..49a614271 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -1,6 +1,7 @@ -{View, $, $$} = require '../src/space-pen-extensions' +path = require 'path' _ = require 'underscore-plus' {convertStackTrace} = require 'coffeestack' +{View, $, $$} = require '../src/space-pen-extensions' sourceMaps = {} formatStackTrace = (message='', stackTrace) -> @@ -166,7 +167,12 @@ class AtomReporter extends View else @bundledArea.hide() if userPackageSpecs > 0 - @userHeader.text("User Package Specs (#{userPackageSpecs})") + if coreSpecs is 0 and bundledPackageSpecs is 0 + packageFolderName = path.basename(path.dirname(specs[0].specDirectory)) + packageName = _.undasherize(_.uncamelcase(packageFolderName)) + @userHeader.text("#{packageName} Specs (#{userPackageSpecs})") + else + @userHeader.text("User Package Specs (#{userPackageSpecs})") else @userArea.hide() From c882d73527d4717ca55074e07cb0edef6034b222 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 18:53:06 -0800 Subject: [PATCH 14/29] Add it prefix to failure descriptions --- spec/atom-reporter.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 49a614271..55e8a7de3 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -231,7 +231,10 @@ class SpecResultView extends View initialize: (@spec) -> @addClass("spec-view-#{@spec.id}") - @description.text @spec.description + + description = @spec.description + description = "it #{description}" if description.indexOf('it ') isnt 0 + @description.text(description) for result in @spec.results().getItems() when not result.passed() stackTrace = formatStackTrace(result.message, result.trace.stack) From 4b2e8f8713310a089b8d6680830c5d0ca3620512 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 19:01:04 -0800 Subject: [PATCH 15/29] Use fold/unfold octicons --- spec/atom-reporter.coffee | 4 ++-- static/jasmine.less | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 55e8a7de3..f5116936a 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -117,7 +117,7 @@ class AtomReporter extends View element = $(currentTarget) specFailures = element.parent().find('.spec-failures') specFailures.toggle() - if specFailures.is(":visible") then element.text "\uf03d" else element.html "\uf03f" + element.toggleClass('folded') false updateSpecCounts: -> @@ -224,7 +224,7 @@ class SuiteResultView extends View class SpecResultView extends View @content: -> @div class: 'spec', => - @div "\uf03d", class: 'spec-toggle' + @div class: 'spec-toggle' @div outlet: 'description', class: 'description' @div outlet: 'specFailures', class: 'spec-failures' spec: null diff --git a/static/jasmine.less b/static/jasmine.less index cb6f8370b..733bcc8b5 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -1,7 +1,5 @@ @import "octicon-mixins"; -@font-face { .octicon-font(); } - body { background-color: #fff; padding: 0; @@ -112,12 +110,15 @@ body { border-left: 3px solid #d9534f; .spec-toggle { - font-family: Octicons Regular; - font-size: 20px; + .octicon(fold); float: right; cursor: pointer; opacity: 0; color: #999; + + &.folded { + .octicon(unfold); + } } .spec-toggle:hover { From 6a408a3a5511a1cf6f00e8aaaba374ada8e895d0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 19:03:55 -0800 Subject: [PATCH 16/29] Make symbol-header font size 18px --- static/jasmine.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/jasmine.less b/static/jasmine.less index 733bcc8b5..3de0abcb0 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -26,7 +26,7 @@ body { } .symbol-header { - font-size: 16px; + font-size: 18px; font-weight: bold; margin: 0; padding-bottom: 10px; From d9e4b9d199320923d6521fd1e355c2c4d0232755 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 19:10:54 -0800 Subject: [PATCH 17/29] Remove redundant spec count --- spec/atom-reporter.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index f5116936a..c1a8fdbb5 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -170,7 +170,7 @@ class AtomReporter extends View if coreSpecs is 0 and bundledPackageSpecs is 0 packageFolderName = path.basename(path.dirname(specs[0].specDirectory)) packageName = _.undasherize(_.uncamelcase(packageFolderName)) - @userHeader.text("#{packageName} Specs (#{userPackageSpecs})") + @userHeader.text("#{packageName} Specs") else @userHeader.text("User Package Specs (#{userPackageSpecs})") else From b6710b54cfe3eb76f4c56ef48ac5f295129c653f Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 19:12:54 -0800 Subject: [PATCH 18/29] Add comment about package specs label --- spec/atom-reporter.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index c1a8fdbb5..a90f3f45e 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -168,7 +168,9 @@ class AtomReporter extends View @bundledArea.hide() if userPackageSpecs > 0 if coreSpecs is 0 and bundledPackageSpecs is 0 - packageFolderName = path.basename(path.dirname(specs[0].specDirectory)) + # Package specs being run, show a more descriptive label + {specDirectory} = specs[0] + packageFolderName = path.basename(path.dirname(specDirectory)) packageName = _.undasherize(_.uncamelcase(packageFolderName)) @userHeader.text("#{packageName} Specs") else From 4743cf89dcc80efc6d3ebf69167a7e8900b2a6fd Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 19:19:56 -0800 Subject: [PATCH 19/29] Ignore lines after the first jasmine line --- spec/atom-reporter.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index a90f3f45e..39da3231c 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -8,9 +8,11 @@ formatStackTrace = (message='', stackTrace) -> return stackTrace unless stackTrace jasminePattern = /^\s*at\s+.*\(?.*\/jasmine(-[^\/]*)?\.js:\d+:\d+\)?\s*$/ + firstJasmineLinePattern = /^\s*at \/.*\/jasmine(-[^\/]*)?\.js:\d+:\d+\)?\s*$/ convertedLines = [] for line in stackTrace.split('\n') convertedLines.push(line) unless jasminePattern.test(line) + break if firstJasmineLinePattern.test(line) stackTrace = convertStackTrace(convertedLines.join('\n'), sourceMaps) lines = stackTrace.split('\n') From d9b14dc4921170bf5d4a1807cff86ac52248fd2c Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 20:52:35 -0800 Subject: [PATCH 20/29] :lipstick: Use Date.now() --- spec/atom-reporter.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 39da3231c..5d1c81bf6 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -61,7 +61,7 @@ class AtomReporter extends View reportRunnerStarting: (runner) -> @handleEvents() - @startedAt = new Date() + @startedAt = Date.now() specs = runner.specs() @totalSpecCount = specs.length @addSpecs(specs) @@ -78,7 +78,7 @@ class AtomReporter extends View reportSpecResults: (spec) -> @completeSpecCount++ - spec.endedAt = new Date().getTime() + spec.endedAt = Date.now() @specComplete(spec) @updateStatusView(spec) @@ -139,7 +139,7 @@ class AtomReporter extends View rootSuite = rootSuite.parentSuite while rootSuite.parentSuite @message.text rootSuite.description - time = "#{Math.round((spec.endedAt - @startedAt.getTime()) / 10)}" + time = "#{Math.round((spec.endedAt - @startedAt) / 10)}" time = "0#{time}" if time.length < 3 @time[0].textContent = "#{time[0...-2]}.#{time[-2..]}s" From 830a8ddc0379bdec794e26668a31395b6e1d2925 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 20:59:38 -0800 Subject: [PATCH 21/29] Use bootstrap tooltips --- spec/atom-reporter.coffee | 19 +------------------ static/jasmine.less | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 5d1c81bf6..21850eba3 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -33,7 +33,6 @@ module.exports = class AtomReporter extends View @content: -> @div class: 'jasmine_reporter spec-reporter', => - @div outlet: 'specPopup', class: "spec-popup alert alert-info" @div outlet: "suites" @div outlet: 'coreArea', class: 'symbol-area', => @div outlet: 'coreHeader', class: 'symbol-header' @@ -99,22 +98,6 @@ class AtomReporter extends View @specFilter(parent) handleEvents: -> - $(document).on "mouseover", ".spec-summary", ({currentTarget}) => - element = $(currentTarget) - description = element.data("description") - return unless description - - clearTimeout @timeoutId if @timeoutId? - @specPopup.show() - spec = _.find(window.timedSpecs, ({fullName}) -> description is fullName) - description = "#{description} #{spec.time}ms" if spec - @specPopup.text description - {left, top} = element.offset() - left += 20 - top += 20 - @specPopup.offset({left, top}) - @timeoutId = setTimeout((=> @specPopup.hide()), 3000) - $(document).on "click", ".spec-toggle", ({currentTarget}) => element = $(currentTarget) specFailures = element.parent().find('.spec-failures') @@ -186,7 +169,7 @@ class AtomReporter extends View specComplete: (spec) -> specSummaryElement = $("#spec-summary-#{spec.id}") specSummaryElement.removeClass('pending') - specSummaryElement.data("description", spec.getFullName()) + specSummaryElement.setTooltip(title: spec.getFullName(), container: '.spec-reporter') results = spec.results() if results.skipped diff --git a/static/jasmine.less b/static/jasmine.less index 3de0abcb0..0b3778753 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -5,12 +5,6 @@ body { padding: 0; } -.spec-popup { - position: absolute; - font-size: 13px; - display: none; -} - .list-unstyled { list-style: none; } @@ -152,4 +146,21 @@ body { border: 1px solid #ddd; overflow: auto; } + + .tooltip { + .tooltip-inner { + border: 1px solid #ccc; + background: #fff; + color: #666; + max-width: 400px; + } + + &.in { + opacity: 1; + } + + .tooltip-arrow { + visibility: hidden; + } + } } From 4c60c40eb8722ce64b7e51f9d9d6f01e4b7c06b6 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 21:00:12 -0800 Subject: [PATCH 22/29] Nest list-unstyled rule --- static/jasmine.less | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/static/jasmine.less b/static/jasmine.less index 0b3778753..c2c579cba 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -1,22 +1,22 @@ @import "octicon-mixins"; +#jasmine_content { + position: fixed; + right: 100%; +} + body { background-color: #fff; padding: 0; } -.list-unstyled { - list-style: none; -} - .spec-reporter { font-size: 11px; line-height: 1.6em; color: #333; - #jasmine_content { - position: fixed; - right: 100%; + .list-unstyled { + list-style: none; } .symbol-header { From 0eb874864c4a00a8ee6573a85d1f1a0ea7356791 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 21:03:22 -0800 Subject: [PATCH 23/29] Remove unused specFilter method --- spec/atom-reporter.coffee | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 21850eba3..e04c77639 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -84,19 +84,6 @@ class AtomReporter extends View reportSpecStarting: (spec) -> @specStarted(spec) - specFilter: (spec) -> - globalFocusPriority = jasmine.getEnv().focusPriority - parent = spec.parentSuite ? spec.suite - - if !globalFocusPriority - true - else if spec.focusPriority >= globalFocusPriority - true - else if not parent - false - else - @specFilter(parent) - handleEvents: -> $(document).on "click", ".spec-toggle", ({currentTarget}) => element = $(currentTarget) From 750e3565fd6c3ed8dba46cbbe7b56fae70c0b4dd Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 10 Feb 2014 21:10:01 -0800 Subject: [PATCH 24/29] Remove unused margin styles --- static/jasmine.less | 2 -- 1 file changed, 2 deletions(-) diff --git a/static/jasmine.less b/static/jasmine.less index c2c579cba..aced4f449 100644 --- a/static/jasmine.less +++ b/static/jasmine.less @@ -22,7 +22,6 @@ body { .symbol-header { font-size: 18px; font-weight: bold; - margin: 0; padding-bottom: 10px; } @@ -69,7 +68,6 @@ body { line-height: 2em; padding: 5px; border-radius: 0; - margin: 0; text-align: center; .spec-count { From c19c4a5e275ad8f2f8fa88e564f1171eb84ad06d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 11 Feb 2014 08:58:30 -0800 Subject: [PATCH 25/29] Remove unused class --- spec/atom-reporter.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index e04c77639..ac3e71044 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -32,7 +32,7 @@ formatStackTrace = (message='', stackTrace) -> module.exports = class AtomReporter extends View @content: -> - @div class: 'jasmine_reporter spec-reporter', => + @div class: 'spec-reporter', => @div outlet: "suites" @div outlet: 'coreArea', class: 'symbol-area', => @div outlet: 'coreHeader', class: 'symbol-header' From 4bfc0e8ea1a214ee0df3bc51385906abaf2de5ee Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 11 Feb 2014 09:00:59 -0800 Subject: [PATCH 26/29] Remove ivars assigned in initialize --- spec/atom-reporter.coffee | 3 --- 1 file changed, 3 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index ac3e71044..65221c644 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -177,8 +177,6 @@ class SuiteResultView extends View @div class: 'suite', => @div outlet: 'description', class: 'description' - suite: null - initialize: (@suite) -> @attr('id', "suite-view-#{@suite.id}") @description.html @suite.description @@ -201,7 +199,6 @@ class SpecResultView extends View @div class: 'spec-toggle' @div outlet: 'description', class: 'description' @div outlet: 'specFailures', class: 'spec-failures' - spec: null initialize: (@spec) -> @addClass("spec-view-#{@spec.id}") From aef3332a09d39a96f29dc3f0a1dce019d93f39fb Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 11 Feb 2014 09:02:41 -0800 Subject: [PATCH 27/29] Set suite description as text --- spec/atom-reporter.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 65221c644..8ce4e34f1 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -179,7 +179,7 @@ class SuiteResultView extends View initialize: (@suite) -> @attr('id', "suite-view-#{@suite.id}") - @description.html @suite.description + @description.text(@suite.description) attach: -> (@parentSuiteView() or $('.results')).append this From 069ead6b1c1193e6545fd49af88b23d6db384a43 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 11 Feb 2014 09:21:21 -0800 Subject: [PATCH 28/29] Show failure count at end --- spec/atom-reporter.coffee | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index 8ce4e34f1..c366ec250 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -69,9 +69,12 @@ class AtomReporter extends View reportRunnerResults: (runner) -> @updateSpecCounts() if @failedCount == 0 - @message.text "Success!" + @message.text "Specs Passed" else - @message.text "Game Over" + if @failedCount is 1 + @message.text "#{@failedCount} Failure" + else + @message.text "#{@failedCount} Failures" reportSuiteResults: (suite) -> From 848d77d3eb02176c442f0fc440667757f1ab465d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 11 Feb 2014 09:23:12 -0800 Subject: [PATCH 29/29] Show 0 failures when all pass --- spec/atom-reporter.coffee | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee index c366ec250..717217c65 100644 --- a/spec/atom-reporter.coffee +++ b/spec/atom-reporter.coffee @@ -68,13 +68,10 @@ class AtomReporter extends View reportRunnerResults: (runner) -> @updateSpecCounts() - if @failedCount == 0 - @message.text "Specs Passed" + if @failedCount is 1 + @message.text "#{@failedCount} failure" else - if @failedCount is 1 - @message.text "#{@failedCount} Failure" - else - @message.text "#{@failedCount} Failures" + @message.text "#{@failedCount} failures" reportSuiteResults: (suite) ->