Hello community, here is the log from the commit of package rubygem-simplecov-html for openSUSE:Factory checked in at 2020-03-07 21:40:06 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-simplecov-html (Old) and /work/SRC/openSUSE:Factory/.rubygem-simplecov-html.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-simplecov-html" Sat Mar 7 21:40:06 2020 rev:14 rq:773851 version:0.11.0 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-simplecov-html/rubygem-simplecov-html.changes 2017-08-16 16:18:55.869441475 +0200 +++ /work/SRC/openSUSE:Factory/.rubygem-simplecov-html.new.26092/rubygem-simplecov-html.changes 2020-03-07 21:40:10.688350728 +0100 @@ -1,0 +2,6 @@ +Mon Feb 10 15:50:02 UTC 2020 - Stephan Kulow <co...@suse.com> + +- updated to version 0.11.0 + see installed CHANGELOG.md + +------------------------------------------------------------------- Old: ---- simplecov-html-0.10.2.gem New: ---- simplecov-html-0.11.0.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-simplecov-html.spec ++++++ --- /var/tmp/diff_new_pack.rDwgVe/_old 2020-03-07 21:40:11.840351506 +0100 +++ /var/tmp/diff_new_pack.rDwgVe/_new 2020-03-07 21:40:11.840351506 +0100 @@ -1,7 +1,7 @@ # # spec file for package rubygem-simplecov-html # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -24,23 +24,24 @@ # Name: rubygem-simplecov-html -Version: 0.10.2 +Version: 0.11.0 Release: 0 %define mod_name simplecov-html %define mod_full_name %{mod_name}-%{version} BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: %{ruby >= 1.8.7} +BuildRequires: %{ruby < 3} +BuildRequires: %{ruby => 2.4} BuildRequires: %{rubygem gem2rpm} BuildRequires: ruby-macros >= 5 -Url: https://github.com/colszowka/simplecov-html +URL: https://github.com/colszowka/simplecov-html Source: https://rubygems.org/gems/%{mod_full_name}.gem Source1: gem2rpm.yml -Summary: Default HTML formatter for SimpleCov code coverage tool for ruby 1.9+ +Summary: Default HTML formatter for SimpleCov code coverage tool for ruby 2.4+ License: MIT Group: Development/Languages/Ruby %description -Default HTML formatter for SimpleCov code coverage tool for ruby 1.9+. +Default HTML formatter for SimpleCov code coverage tool for ruby 2.4+. %prep ++++++ simplecov-html-0.10.2.gem -> simplecov-html-0.11.0.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 2017-08-14 07:37:10.000000000 +0200 +++ new/.gitignore 2020-01-28 13:40:39.000000000 +0100 @@ -1,6 +1,5 @@ .rvmrc .bundle -Gemfile.lock ## MAC OS .DS_Store diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.rubocop.yml new/.rubocop.yml --- old/.rubocop.yml 2017-08-14 07:37:10.000000000 +0200 +++ new/.rubocop.yml 2020-01-28 13:40:39.000000000 +0100 @@ -1,7 +1,23 @@ +AllCops: + TargetRubyVersion: 2.6 + DisplayCopNames: true + +Bundler/DuplicatedGem: + Enabled: false + +Gemspec/RequiredRubyVersion: + Enabled: false + +Layout/AccessModifierIndentation: + EnforcedStyle: outdent + +Layout/SpaceInsideHashLiteralBraces: + EnforcedStyle: no_space + Metrics/BlockNesting: Max: 2 -Metrics/LineLength: +Layout/LineLength: AllowURI: true Enabled: false @@ -13,15 +29,17 @@ Max: 4 CountKeywordArgs: true -Style/AccessModifierIndentation: - EnforcedStyle: outdent +Naming/FileName: + Exclude: + - "lib/simplecov-html.rb" + - "test/test_simple_cov-html.rb" Style/CollectionMethods: PreferredMethods: - map: 'collect' - reduce: 'inject' - find: 'detect' - find_all: 'select' + map: "collect" + reduce: "inject" + find: "detect" + find_all: "select" Style/Documentation: Enabled: false @@ -29,26 +47,33 @@ Style/DoubleNegation: Enabled: false -Style/FileName: - Exclude: - - 'lib/simplecov-html.rb' - - 'test/test_simple_cov-html.rb' +Style/ExpandPathArguments: + Enabled: false + +Style/FrozenStringLiteralComment: + Enabled: true Style/HashSyntax: EnforcedStyle: hash_rockets Style/MutableConstant: Exclude: - - 'lib/simplecov-html/version.rb' + - "lib/simplecov-html/version.rb" -Style/RegexpLiteral: +Style/NumericPredicate: Enabled: false -Style/SpaceInsideHashLiteralBraces: - EnforcedStyle: no_space +Style/RegexpLiteral: + Enabled: false Style/StringLiterals: EnforcedStyle: double_quotes -Style/TrailingCommaInLiteral: - EnforcedStyleForMultiline: 'comma' +Style/SymbolArray: + Enabled: false + +Style/TrailingCommaInHashLiteral: + EnforcedStyleForMultiline: "comma" + +Style/TrailingCommaInArrayLiteral: + EnforcedStyleForMultiline: "comma" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.tool-versions new/.tool-versions --- old/.tool-versions 1970-01-01 01:00:00.000000000 +0100 +++ new/.tool-versions 2020-01-28 13:40:39.000000000 +0100 @@ -0,0 +1 @@ +ruby 2.6.5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.travis.yml new/.travis.yml --- old/.travis.yml 2017-08-14 07:37:10.000000000 +0200 +++ new/.travis.yml 2020-01-28 13:40:39.000000000 +0100 @@ -1,29 +1,25 @@ language: ruby before_install: - - gem install bundler + - gem i bundler -bundler_args: --without development --jobs=3 --retry=3 - -cache: bundler - -sudo: false - -rvm: - - 1.8.7 - - 1.9.3 - - 2.0.0 - - 2.1 - - 2.2 - - 2.3.1 - - ruby-head - - jruby - - rbx-2 - - jruby-9.1.12.0 +bundler_args: --without benchmark --jobs=3 --retry=3 matrix: + include: + - rvm: 2.4.9 + - rvm: 2.5.7 + - rvm: 2.6.5 + - rvm: 2.7.0 + - rvm: jruby-9.2.9.0 + env: JRUBY_OPTS=--debug + jdk: openjdk8 + - rvm: ruby-head + - rvm: jruby-head + env: JRUBY_OPTS=--debug + jdk: openjdk8 allow_failures: - rvm: ruby-head - - rvm: jruby - - rvm: rbx-2 + - rvm: jruby-head + env: JRUBY_OPTS=--debug fast_finish: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md --- old/CHANGELOG.md 2017-08-14 07:37:10.000000000 +0200 +++ new/CHANGELOG.md 2020-01-28 13:40:39.000000000 +0100 @@ -1,11 +1,41 @@ -0.10.2 2017-08-14 +0.11.0 (2020-01-28) +======= + +This release goes together with simplecov 0.18 to bring branch coverage support to you. Please also check the notes of the beta releases. + +## Enhancements +* Display total branch coverage percentage in the overview (if branch coverage enabled) + +0.11.0.beta2 (2020-01-19) +======= + +## Enhancements +* changed display of branch coverage to be `branch_type: hit_count` which should be more expressive and more intuitive +* Cached lookup of whether we're doing branch coverage or not (should be faster) + +## Bugfixes +* Fixed sorting of percent column (regression in previous release) + +0.11.0.beta1 (2020-01-05) +======== + +Changes ruby support to 2.4+, adds branch coverage support. Meant to be used with simplecov 0.18 + +## Breaking Changes +* Drops support for EOL'ed ruby versions, new support is ~> 2.4 + +## Enhancements +* Support/display of branch coverage from simplecov 0.18.0.beta1, little badges saying `hit_count, positive_or_negative` will appear next to lines if branch coverage is activated. `0, +` means positive branch was never hit, `2, -` means negative branch was hit twice +* Encoding compatibility errors are now caught and printed out + +0.10.2 (2017-08-14) ======== ## Bugfixes * Allow usage with frozen-string-literal-enabled. See [#56](https://github.com/colszowka/simplecov-html/pull/56) (thanks @pat) -0.10.1 2017-05-17 +0.10.1 (2017-05-17) ======== ## Bugfixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Gemfile new/Gemfile --- old/Gemfile 2017-08-14 07:37:10.000000000 +0200 +++ new/Gemfile 2020-01-28 13:40:39.000000000 +0100 @@ -1,26 +1,16 @@ +# frozen_string_literal: true + source "https://rubygems.org" gemspec -if RUBY_VERSION == "1.8.7" - gem "rake", "~> 10.5" -else - gem "rake", ">= 11" -end +gem "rake", ">= 11" # Use local copy of simplecov in development when checked out, fetch from git otherwise if File.directory?(File.dirname(__FILE__) + "/../simplecov") gem "simplecov", :path => File.dirname(__FILE__) + "/../simplecov" else - gem "simplecov", :git => "https://github.com/colszowka/simplecov" -end - -platforms :ruby_18, :ruby_19 do - gem "json", "~> 1.8" -end - -platforms :ruby_18, :ruby_19, :ruby_20, :ruby_21 do - gem "rack", "~> 1.6" + gem "simplecov", :github => "colszowka/simplecov" end group :test do @@ -30,5 +20,6 @@ group :development do gem "rubocop" gem "sass" - gem "sprockets" + # sprockets 4.0 requires ruby 2.5+ + gem "sprockets", "~> 3.7" end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Gemfile.lock new/Gemfile.lock --- old/Gemfile.lock 1970-01-01 01:00:00.000000000 +0100 +++ new/Gemfile.lock 2020-01-28 13:40:39.000000000 +0100 @@ -0,0 +1,62 @@ +PATH + remote: . + specs: + simplecov-html (0.11.0) + +PATH + remote: /home/tobi/github/simplecov + specs: + simplecov (0.18.0) + docile (~> 1.1) + simplecov-html (~> 0.11.0) + +GEM + remote: https://rubygems.org/ + specs: + ast (2.4.0) + concurrent-ruby (1.1.5) + docile (1.3.2) + ffi (1.11.3) + jaro_winkler (1.5.4) + minitest (5.13.0) + parallel (1.19.1) + parser (2.7.0.1) + ast (~> 2.4.0) + rack (2.0.7) + rainbow (3.0.0) + rake (13.0.1) + rb-fsevent (0.10.3) + rb-inotify (0.10.0) + ffi (~> 1.0) + rubocop (0.78.0) + jaro_winkler (~> 1.5.1) + parallel (~> 1.10) + parser (>= 2.6) + rainbow (>= 2.2.2, < 4.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 1.7) + ruby-progressbar (1.10.1) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + unicode-display_width (1.6.0) + +PLATFORMS + ruby + +DEPENDENCIES + minitest + rake (>= 11) + rubocop + sass + simplecov! + simplecov-html! + sprockets (~> 3.7) + +BUNDLED WITH + 2.0.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Guardfile new/Guardfile --- old/Guardfile 2017-08-14 07:37:10.000000000 +0200 +++ new/Guardfile 2020-01-28 13:40:39.000000000 +0100 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # A sample Guardfile # More info at https://github.com/guard/guard#readme diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md --- old/README.md 2017-08-14 07:37:10.000000000 +0200 +++ new/README.md 2020-01-28 13:40:39.000000000 +0100 @@ -3,7 +3,7 @@ ***Note: To learn more about SimpleCov, check out the main repo at https://github.com/colszowka/simplecov*** -Generates a nice HTML report of your SimpleCov ruby code coverage results on Ruby 1.9 using client-side Javascript +Generates a nice HTML report of your SimpleCov ruby code coverage results on Ruby 2.4+ using client-side Javascript quite extensively. @@ -17,7 +17,7 @@ * `cd` there, run `bundle` * You should end up with all dev dependencies installed and simplecov-html being used from your disk * Run the tests (units and features) - + Please remember to add tests if you add functionality. **Important:** If you modify the JS/CSS assets, you'll have to precompile them using `rake assets:compile` - otherwise, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Rakefile new/Rakefile --- old/Rakefile 2017-08-14 07:37:10.000000000 +0200 +++ new/Rakefile 2020-01-28 13:40:39.000000000 +0100 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require "bundler" Bundler::GemHelper.install_tasks @@ -21,7 +23,7 @@ RuboCop::RakeTask.new rescue LoadError task :rubocop do - $stderr.puts "Rubocop is disabled" + warn "Rubocop is disabled" end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assets/javascripts/application.js new/assets/javascripts/application.js --- old/assets/javascripts/application.js 2017-08-14 07:37:10.000000000 +0200 +++ new/assets/javascripts/application.js 2020-01-28 13:40:39.000000000 +0100 @@ -2,34 +2,36 @@ //= require_directory ./plugins/ //= require_self -$(document).ready(function() { +$(document).ready(function () { + branchCoverageActivated = $("body").data("branch-coverage") == true; + // Configuration for fancy sortable tables for source file groups + // For what these columns are, cecl out file_list.erb - null basically + // does normal/number style sorting which fine for hit/missed lines only + // percentages like "covered percent" need special sorting arguments. + lineColumns = [null, { "sType": "percent" }, null, null, null, null, null]; + branchColumns = [{ "sType": "percent" }, null, null, null]; + + dataColumns = branchCoverageActivated ? lineColumns.concat(branchColumns) : lineColumns; + $('.file_list').dataTable({ - "aaSorting": [[ 1, "asc" ]], + "aaSorting": [[1, "asc"]], "bPaginate": false, "bJQueryUI": true, - "aoColumns": [ - null, - { "sType": "percent" }, - null, - null, - null, - null, - null - ] + "aoColumns": dataColumns }); // Syntax highlight all files up front - deactivated // $('.source_table pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')}); // Syntax highlight source files on first toggle of the file view popup - $("a.src_link").click(function() { + $("a.src_link").click(function () { // Get the source file element that corresponds to the clicked element var source_table = $($(this).attr('href')); // If not highlighted yet, do it! if (!source_table.hasClass('highlighted')) { - source_table.find('pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')}); + source_table.find('pre code').each(function (i, e) { hljs.highlightBlock(e, ' ') }); source_table.addClass('highlighted'); }; }); @@ -44,14 +46,14 @@ opacity: 1, width: "95%", height: "95%", - onLoad: function() { + onLoad: function () { prev_anchor = curr_anchor ? curr_anchor : jQuery.url.attr('anchor'); curr_anchor = this.href.split('#')[1]; window.location.hash = curr_anchor; }, - onCleanup: function() { + onCleanup: function () { if (prev_anchor && prev_anchor != curr_anchor) { - $('a[href="#'+prev_anchor+'"]').click(); + $('a[href="#' + prev_anchor + '"]').click(); curr_anchor = prev_anchor; } else { $('.group_tabs a:first').click(); @@ -62,13 +64,13 @@ } }); - window.onpopstate = function(event){ - if (location.hash.substring(0,2) == "#_") { + window.onpopstate = function (event) { + if (location.hash.substring(0, 2) == "#_") { $.colorbox.close(); curr_anchor = jQuery.url.attr('anchor'); } else { if ($('#colorbox').is(':hidden')) { - $('a.src_link[href="'+location.hash+'"]').colorbox({ open: true }); + $('a.src_link[href="' + location.hash + '"]').colorbox({ open: true }); } } }; @@ -78,23 +80,23 @@ $('.file_list_container').hide(); // Add tabs based upon existing file_list_containers - $('.file_list_container h2').each(function(){ + $('.file_list_container h2').each(function () { var container_id = $(this).parent().attr('id'); var group_name = $(this).find('.group_name').first().html(); var covered_percent = $(this).find('.covered_percent').first().html(); - $('.group_tabs').append('<li><a href="#' + container_id + '">' + group_name + ' ('+ covered_percent +')</a></li>'); + $('.group_tabs').append('<li><a href="#' + container_id + '">' + group_name + ' (' + covered_percent + ')</a></li>'); }); - $('.group_tabs a').each( function() { + $('.group_tabs a').each(function () { $(this).addClass($(this).attr('href').replace('#', '')); }); // Make sure tabs don't get ugly focus borders when active - $('.group_tabs a').live('focus', function() { $(this).blur(); }); + $('.group_tabs a').live('focus', function () { $(this).blur(); }); var favicon_path = $('link[rel="shortcut icon"]').attr('href'); - $('.group_tabs a').live('click', function(){ + $('.group_tabs a').live('click', function () { if (!$(this).parent().hasClass('active')) { $('.group_tabs a').parent().removeClass('active'); $(this).parent().addClass('active'); @@ -105,7 +107,7 @@ // Force favicon reload - otherwise the location change containing anchor would drop the favicon... // Works only on firefox, but still... - Anyone know a better solution to force favicon on local file? $('link[rel="shortcut icon"]').remove(); - $('head').append('<link rel="shortcut icon" type="image/png" href="'+ favicon_path +'" />'); + $('head').append('<link rel="shortcut icon" type="image/png" href="' + favicon_path + '" />'); }; return false; }); @@ -115,7 +117,7 @@ if (anchor.length == 40) { $('a.src_link[href=#' + anchor + ']').click(); } else { - $('.group_tabs a.'+anchor.replace('_', '')).click(); + $('.group_tabs a.' + anchor.replace('_', '')).click(); } } else { $('.group_tabs a:first').click(); @@ -124,4 +126,5 @@ $("abbr.timeago").timeago(); $('#loading').fadeOut(); $('#wrapper').show(); + $('.dataTables_filter input').focus() }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/assets/stylesheets/screen.css.sass new/assets/stylesheets/screen.css.sass --- old/assets/stylesheets/screen.css.sass 2017-08-14 07:37:10.000000000 +0200 +++ new/assets/stylesheets/screen.css.sass 2020-01-28 13:40:39.000000000 +0100 @@ -188,6 +188,8 @@ .yellow color: #da0 +.blue + color: blue .source_table .covered @@ -198,6 +200,8 @@ border-color: black .skipped border-color: #fc0 + .missed-branch + border-color: #bf0000 .covered &:nth-child(odd) background-color: #CDF2CD @@ -217,4 +221,9 @@ &:nth-child(odd) background-color: #FBF0C0 &:nth-child(even) - background-color: #FBFfCf \ No newline at end of file + background-color: #FBFfCf + .missed-branch + &:nth-child(odd) + background-color: #cc8e8e + &:nth-child(even) + background-color: #cc6e6e \ No newline at end of file Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/simplecov-html/version.rb new/lib/simplecov-html/version.rb --- old/lib/simplecov-html/version.rb 2017-08-14 07:37:10.000000000 +0200 +++ new/lib/simplecov-html/version.rb 2020-01-28 13:40:39.000000000 +0100 @@ -1,7 +1,9 @@ +# frozen_string_literal: true + module SimpleCov module Formatter class HTMLFormatter - VERSION = "0.10.2".freeze + VERSION = "0.11.0" end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/simplecov-html.rb new/lib/simplecov-html.rb --- old/lib/simplecov-html.rb 2017-08-14 07:37:10.000000000 +0200 +++ new/lib/simplecov-html.rb 2020-01-28 13:40:39.000000000 +0100 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require "erb" require "cgi" require "fileutils" @@ -14,6 +16,10 @@ module SimpleCov module Formatter class HTMLFormatter + def initialize + @branchable_result = SimpleCov.branch_coverage? + end + def format(result) Dir[File.join(File.dirname(__FILE__), "../public/*")].each do |path| FileUtils.cp_r(path, asset_output_path) @@ -29,6 +35,21 @@ "Coverage report generated for #{result.command_name} to #{output_path}. #{result.covered_lines} / #{result.total_lines} LOC (#{result.covered_percent.round(2)}%) covered." end + def branchable_result? + # cached in initialize because we truly look it up a whole bunch of times + # and it's easier to cache here then in SimpleCov because there we might + # still enable/disable branch coverage criterion + @branchable_result + end + + def line_status?(source_file, line) + if branchable_result? && source_file.line_with_missed_branch?(line.number) + "missed-branch" + else + line.status + end + end + private # Returns the an erb instance for the template of given name @@ -42,6 +63,7 @@ def asset_output_path return @asset_output_path if defined?(@asset_output_path) && @asset_output_path + @asset_output_path = File.join(output_path, "assets", SimpleCov::Formatter::HTMLFormatter::VERSION) FileUtils.mkdir_p(@asset_output_path) @asset_output_path @@ -54,6 +76,8 @@ # Returns the html for the given source_file def formatted_source_file(source_file) template("source_file").result(binding) + rescue Encoding::CompatibilityError => e + puts "Encoding problems with file #{source_file.filename}. Simplecov/ERB can't handle non ASCII characters in filenames. Error: #{e.message}." end # Returns a table containing the given source files @@ -66,6 +90,10 @@ template("file_list").result(binding) end + def covered_percent(percent) + template("covered_percent").result(binding) + end + def coverage_css_class(covered_percent) if covered_percent > 90 "green" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2017-08-14 07:37:10.000000000 +0200 +++ new/metadata 2020-01-28 13:40:39.000000000 +0100 @@ -1,30 +1,16 @@ --- !ruby/object:Gem::Specification name: simplecov-html version: !ruby/object:Gem::Version - version: 0.10.2 + version: 0.11.0 platform: ruby authors: - Christoph Olszowka autorequire: bindir: bin cert_chain: [] -date: 2017-08-14 00:00:00.000000000 Z -dependencies: -- !ruby/object:Gem::Dependency - name: bundler - requirement: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '1.9' - type: :development - prerelease: false - version_requirements: !ruby/object:Gem::Requirement - requirements: - - - "~>" - - !ruby/object:Gem::Version - version: '1.9' -description: Default HTML formatter for SimpleCov code coverage tool for ruby 1.9+ +date: 2020-01-28 00:00:00.000000000 Z +dependencies: [] +description: Default HTML formatter for SimpleCov code coverage tool for ruby 2.4+ email: - christoph at olszowka de executables: [] @@ -34,9 +20,11 @@ - ".document" - ".gitignore" - ".rubocop.yml" +- ".tool-versions" - ".travis.yml" - CHANGELOG.md - Gemfile +- Gemfile.lock - Guardfile - LICENSE - README.md @@ -83,6 +71,7 @@ - simplecov-html.gemspec - test/helper.rb - test/test_simple_cov-html.rb +- views/covered_percent.erb - views/file_list.erb - views/layout.erb - views/source_file.erb @@ -96,18 +85,17 @@ - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - - ">=" + - - "~>" - !ruby/object:Gem::Version - version: 1.8.7 + version: '2.4' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] -rubyforge_project: -rubygems_version: 2.6.10 +rubygems_version: 3.0.3 signing_key: specification_version: 4 -summary: Default HTML formatter for SimpleCov code coverage tool for ruby 1.9+ +summary: Default HTML formatter for SimpleCov code coverage tool for ruby 2.4+ test_files: [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/public/application.css new/public/application.css --- old/public/application.css 2017-08-14 07:37:10.000000000 +0200 +++ new/public/application.css 2020-01-28 13:40:39.000000000 +0100 @@ -532,6 +532,7 @@ ColorBox Core Style: The following CSS is consistent between example themes and should not be altered. */ + #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} @@ -586,19 +587,19 @@ top: 50%; } a { - color: #333333; + color: #333; text-decoration: none; } a:hover { - color: black; + color: #000; text-decoration: underline; } body { font-family: "Lucida Grande", Helvetica, "Helvetica Neue", Arial, sans-serif; padding: 12px; - background-color: #333333; } + background-color: #333; } h1, h2, h3, h4 { - color: #1c2324; + color: #1C2324; margin: 0; padding: 0; margin-bottom: 12px; } @@ -609,8 +610,8 @@ #content { clear: left; background-color: white; - border: 2px solid #dddddd; - border-top: 8px solid #dddddd; + border: 2px solid #ddd; + border-top: 8px solid #ddd; padding: 18px; -webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius: 5px; @@ -632,7 +633,7 @@ .timestamp { float: right; - color: #dddddd; } + color: #ddd; } .group_tabs { list-style: none; @@ -648,13 +649,13 @@ float: left; text-decoration: none; padding: 4px 8px; - background-color: #aaaaaa; + background-color: #aaa; background: -webkit-gradient(linear, 0 0, 0 bottom, from(#dddddd), to(#aaaaaa)); background: -moz-linear-gradient(#dddddd, #aaaaaa); background: linear-gradient(#dddddd, #aaaaaa); text-shadow: #e5e5e5 1px 1px 0px; border-bottom: none; - color: #333333; + color: #333; font-weight: bold; margin-right: 8px; border-top: 1px solid #efefef; @@ -665,7 +666,7 @@ border-top-left-radius: 2px; border-top-right-radius: 2px; } .group_tabs li a:hover { - background-color: #cccccc; + background-color: #ccc; background: -webkit-gradient(linear, 0 0, 0 bottom, from(#eeeeee), to(#aaaaaa)); background: -moz-linear-gradient(#eeeeee, #aaaaaa); background: linear-gradient(#eeeeee, #aaaaaa); } @@ -674,8 +675,8 @@ padding-bottom: 3px; } .group_tabs li.active a { color: black; - text-shadow: white 1px 1px 0px; - background-color: #dddddd; + text-shadow: #fff 1px 1px 0px; + background-color: #ddd; background: -webkit-gradient(linear, 0 0, 0 bottom, from(white), to(#dddddd)); background: -moz-linear-gradient(white, #dddddd); background: linear-gradient(white, #dddddd); } @@ -713,13 +714,13 @@ margin: 0; padding: 0; white-space: normal; - color: black; + color: #000; font-family: "Monaco", "Inconsolata", "Consolas", monospace; } .source_table code { - color: black; + color: #000; font-family: "Monaco", "Inconsolata", "Consolas", monospace; } .source_table pre { - background-color: #333333; } + background-color: #333; } .source_table pre ol { margin: 0px; padding: 0px; @@ -737,7 +738,7 @@ float: right; margin-left: 10px; padding: 2px 4px; - background-color: #444444; + background-color: #444; background: -webkit-gradient(linear, 0 0, 0 bottom, from(#222222), to(#666666)); background: -moz-linear-gradient(#222222, #666666); background: linear-gradient(#222222, #666666); @@ -749,51 +750,60 @@ border-radius: 6px; } #footer { - color: #dddddd; + color: #ddd; font-size: 12px; font-weight: bold; margin-top: 12px; text-align: right; } #footer a { - color: #eeeeee; + color: #eee; text-decoration: underline; } #footer a:hover { - color: white; + color: #fff; text-decoration: none; } .green { - color: #009900; } + color: #090; } .red { - color: #990000; } + color: #900; } .yellow { - color: #ddaa00; } + color: #da0; } + +.blue { + color: blue; } .source_table .covered { - border-color: #009900; } + border-color: #090; } .source_table .missed { - border-color: #990000; } + border-color: #900; } .source_table .never { border-color: black; } .source_table .skipped { - border-color: #ffcc00; } + border-color: #fc0; } +.source_table .missed-branch { + border-color: #bf0000; } .source_table .covered:nth-child(odd) { - background-color: #cdf2cd; } + background-color: #CDF2CD; } .source_table .covered:nth-child(even) { - background-color: #dbf2db; } + background-color: #DBF2DB; } .source_table .missed:nth-child(odd) { - background-color: #f7c0c0; } + background-color: #F7C0C0; } .source_table .missed:nth-child(even) { - background-color: #f7cfcf; } + background-color: #F7CFCF; } .source_table .never:nth-child(odd) { background-color: #efefef; } .source_table .never:nth-child(even) { background-color: #f4f4f4; } .source_table .skipped:nth-child(odd) { - background-color: #fbf0c0; } + background-color: #FBF0C0; } .source_table .skipped:nth-child(even) { - background-color: #fbffcf; } + background-color: #FBFfCf; } +.source_table .missed-branch:nth-child(odd) { + background-color: #cc8e8e; } +.source_table .missed-branch:nth-child(even) { + background-color: #cc6e6e; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/public/application.js new/public/application.js --- old/public/application.js 2017-08-14 07:37:10.000000000 +0200 +++ new/public/application.js 2020-01-28 13:40:39.000000000 +0100 @@ -1582,34 +1582,33 @@ -$(document).ready(function() { +$(document).ready(function () { + branchCoverageActivated = $("body").data("branch-coverage") == true; + // Configuration for fancy sortable tables for source file groups + lineColumns = [null, { "sType": "percent" }, null, null, null, null, null]; + branchColumns = [{ "sType": "percent" }, null, null, null]; + + dataColumns = branchCoverageActivated ? lineColumns.concat(branchColumns) : lineColumns; + $('.file_list').dataTable({ - "aaSorting": [[ 1, "asc" ]], + "aaSorting": [[1, "asc"]], "bPaginate": false, "bJQueryUI": true, - "aoColumns": [ - null, - { "sType": "percent" }, - null, - null, - null, - null, - null - ] + "aoColumns": dataColumns }); // Syntax highlight all files up front - deactivated // $('.source_table pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')}); // Syntax highlight source files on first toggle of the file view popup - $("a.src_link").click(function() { + $("a.src_link").click(function () { // Get the source file element that corresponds to the clicked element var source_table = $($(this).attr('href')); // If not highlighted yet, do it! if (!source_table.hasClass('highlighted')) { - source_table.find('pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')}); + source_table.find('pre code').each(function (i, e) { hljs.highlightBlock(e, ' ') }); source_table.addClass('highlighted'); }; }); @@ -1624,14 +1623,14 @@ opacity: 1, width: "95%", height: "95%", - onLoad: function() { + onLoad: function () { prev_anchor = curr_anchor ? curr_anchor : jQuery.url.attr('anchor'); curr_anchor = this.href.split('#')[1]; window.location.hash = curr_anchor; }, - onCleanup: function() { + onCleanup: function () { if (prev_anchor && prev_anchor != curr_anchor) { - $('a[href="#'+prev_anchor+'"]').click(); + $('a[href="#' + prev_anchor + '"]').click(); curr_anchor = prev_anchor; } else { $('.group_tabs a:first').click(); @@ -1642,13 +1641,13 @@ } }); - window.onpopstate = function(event){ - if (location.hash.substring(0,2) == "#_") { + window.onpopstate = function (event) { + if (location.hash.substring(0, 2) == "#_") { $.colorbox.close(); curr_anchor = jQuery.url.attr('anchor'); } else { if ($('#colorbox').is(':hidden')) { - $('a.src_link[href="'+location.hash+'"]').colorbox({ open: true }); + $('a.src_link[href="' + location.hash + '"]').colorbox({ open: true }); } } }; @@ -1658,23 +1657,23 @@ $('.file_list_container').hide(); // Add tabs based upon existing file_list_containers - $('.file_list_container h2').each(function(){ + $('.file_list_container h2').each(function () { var container_id = $(this).parent().attr('id'); var group_name = $(this).find('.group_name').first().html(); var covered_percent = $(this).find('.covered_percent').first().html(); - $('.group_tabs').append('<li><a href="#' + container_id + '">' + group_name + ' ('+ covered_percent +')</a></li>'); + $('.group_tabs').append('<li><a href="#' + container_id + '">' + group_name + ' (' + covered_percent + ')</a></li>'); }); - $('.group_tabs a').each( function() { + $('.group_tabs a').each(function () { $(this).addClass($(this).attr('href').replace('#', '')); }); // Make sure tabs don't get ugly focus borders when active - $('.group_tabs a').live('focus', function() { $(this).blur(); }); + $('.group_tabs a').live('focus', function () { $(this).blur(); }); var favicon_path = $('link[rel="shortcut icon"]').attr('href'); - $('.group_tabs a').live('click', function(){ + $('.group_tabs a').live('click', function () { if (!$(this).parent().hasClass('active')) { $('.group_tabs a').parent().removeClass('active'); $(this).parent().addClass('active'); @@ -1685,7 +1684,7 @@ // Force favicon reload - otherwise the location change containing anchor would drop the favicon... // Works only on firefox, but still... - Anyone know a better solution to force favicon on local file? $('link[rel="shortcut icon"]').remove(); - $('head').append('<link rel="shortcut icon" type="image/png" href="'+ favicon_path +'" />'); + $('head').append('<link rel="shortcut icon" type="image/png" href="' + favicon_path + '" />'); }; return false; }); @@ -1695,7 +1694,7 @@ if (anchor.length == 40) { $('a.src_link[href=#' + anchor + ']').click(); } else { - $('.group_tabs a.'+anchor.replace('_', '')).click(); + $('.group_tabs a.' + anchor.replace('_', '')).click(); } } else { $('.group_tabs a:first').click(); @@ -1704,4 +1703,5 @@ $("abbr.timeago").timeago(); $('#loading').fadeOut(); $('#wrapper').show(); + $('.dataTables_filter input').focus() }); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/simplecov-html.gemspec new/simplecov-html.gemspec --- old/simplecov-html.gemspec 2017-08-14 07:37:10.000000000 +0200 +++ new/simplecov-html.gemspec 2020-01-28 13:40:39.000000000 +0100 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + $LOAD_PATH.push File.expand_path("../lib", __FILE__) require "simplecov-html/version" @@ -8,12 +10,11 @@ gem.authors = ["Christoph Olszowka"] gem.email = ["christoph at olszowka de"] gem.homepage = "https://github.com/colszowka/simplecov-html" - gem.description = %(Default HTML formatter for SimpleCov code coverage tool for ruby 1.9+) + gem.description = %(Default HTML formatter for SimpleCov code coverage tool for ruby 2.4+) gem.summary = gem.description gem.license = "MIT" - gem.required_ruby_version = ">= 1.8.7" - gem.add_development_dependency "bundler", "~> 1.9" + gem.required_ruby_version = "~> 2.4" gem.files = `git ls-files`.split("\n") gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/helper.rb new/test/helper.rb --- old/test/helper.rb 2017-08-14 07:37:10.000000000 +0200 +++ new/test/helper.rb 2020-01-28 13:40:39.000000000 +0100 @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require "bundler/setup" require "simplecov" require "simplecov-html" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/test_simple_cov-html.rb new/test/test_simple_cov-html.rb --- old/test/test_simple_cov-html.rb 2017-08-14 07:37:10.000000000 +0200 +++ new/test/test_simple_cov-html.rb 2020-01-28 13:40:39.000000000 +0100 @@ -1,6 +1,8 @@ +# frozen_string_literal: true + require "helper" -class TestSimpleCovHtml < MiniTest::Unit::TestCase +class TestSimpleCovHtml < Minitest::Test def test_defined assert defined?(SimpleCov::Formatter::HTMLFormatter) assert defined?(SimpleCov::Formatter::HTMLFormatter::VERSION) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/views/covered_percent.erb new/views/covered_percent.erb --- old/views/covered_percent.erb 1970-01-01 01:00:00.000000000 +0100 +++ new/views/covered_percent.erb 2020-01-28 13:40:39.000000000 +0100 @@ -0,0 +1,3 @@ +<span class="<%= coverage_css_class(percent) %>"> + <%= percent.round(2) %>% +</span> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/views/file_list.erb new/views/file_list.erb --- old/views/file_list.erb 2017-08-14 07:37:10.000000000 +0200 +++ new/views/file_list.erb 2020-01-28 13:40:39.000000000 +0100 @@ -1,21 +1,40 @@ <div class="file_list_container" id="<%= title_id %>"> <h2> <span class="group_name"><%= title %></span> - (<span class="covered_percent"><span class="<%= coverage_css_class(source_files.covered_percent) %>"><%= source_files.covered_percent.round(2) %>%</span></span> + (<span class="covered_percent"> + <%= covered_percent(source_files.covered_percent) %> + </span> covered at <span class="covered_strength"> <span class="<%= strength_css_class(source_files.covered_strength) %>"> <%= source_files.covered_strength.round(2) %> </span> - </span> hits/line) + </span> hits/line + ) </h2> + <a name="<%= title_id %>"></a> + <div> <b><%= source_files.length %></b> files in total. - <b><%= source_files.lines_of_code %></b> relevant lines. + </div> + + <div class="t-line-summary"> + <b><%= source_files.lines_of_code %></b> relevant lines, <span class="green"><b><%= source_files.covered_lines %></b> lines covered</span> and - <span class="red"><b><%= source_files.missed_lines %></b> lines missed </span> + <span class="red"><b><%= source_files.missed_lines %></b> lines missed. </span> + (<%= covered_percent(source_files.covered_percent) %>) </div> + + <% if branchable_result? %> + <div class="t-branch-summary"> + <span><b><%= source_files.total_branches %></b> total branches, </span> + <span class="green"><b><%= source_files.covered_branches %></b> branches covered</span> and + <span class="red"><b><%= source_files.missed_branches %></b> branches missed.</span> + (<%= covered_percent(source_files.branch_covered_percent) %>) + </div> + <% end %> + <table class="file_list"> <thead> <tr> @@ -26,19 +45,31 @@ <th>Lines covered</th> <th>Lines missed</th> <th>Avg. Hits / Line</th> + <% if branchable_result? %> + <th>Branch Coverage</th> + <th>Branches</th> + <th>Covered branches</th> + <th>Missed branches </th> + <% end %> </tr> </thead> <tbody> <% source_files.each do |source_file| %> - <tr> - <td class="strong"><%= link_to_source_file(source_file) %></td> - <td class="<%= coverage_css_class(source_file.covered_percent) %> strong"><%= source_file.covered_percent.round(2).to_s %> %</td> - <td><%= source_file.lines.count %></td> - <td><%= source_file.covered_lines.count + source_file.missed_lines.count %></td> - <td><%= source_file.covered_lines.count %></td> - <td><%= source_file.missed_lines.count %></td> - <td><%= source_file.covered_strength %></td> - </tr> + <tr class="t-file"> + <td class="strong t-file__name"><%= link_to_source_file(source_file) %></td> + <td class="<%= coverage_css_class(source_file.covered_percent) %> strong t-file__coverage"><%= source_file.covered_percent.round(2).to_s %> %</td> + <td><%= source_file.lines.count %></td> + <td><%= source_file.covered_lines.count + source_file.missed_lines.count %></td> + <td><%= source_file.covered_lines.count %></td> + <td><%= source_file.missed_lines.count %></td> + <td><%= source_file.covered_strength.round(2) %></td> + <% if branchable_result? %> + <td class="<%= coverage_css_class(source_file.branches_coverage_percent) %> strong t-file__branch-coverage"><%= source_file.branches_coverage_percent.round(2).to_s %> %</td> + <td><%= source_file.total_branches.count %></td> + <td><%= source_file.covered_branches.count %></td> + <td><%= source_file.missed_branches.count %></td> + <% end %> + </tr> <% end %> </tbody> </table> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/views/layout.erb new/views/layout.erb --- old/views/layout.erb 2017-08-14 07:37:10.000000000 +0200 +++ new/views/layout.erb 2020-01-28 13:40:39.000000000 +0100 @@ -3,13 +3,13 @@ <head> <title>Code coverage for <%= SimpleCov.project_name %></title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - <script src='<%= assets_path('application.js') %>' type='text/javascript'></script> + <script src='<%= assets_path('application.js') %>' type='text/javascript'></script> <link href='<%= assets_path('application.css') %>' media='screen, projection, print' rel='stylesheet' type='text/css'> <link rel="shortcut icon" type="image/png" href="<%= assets_path("favicon_#{coverage_css_class(result.source_files.covered_percent)}.png") %>" /> <link rel="icon" type="image/png" href="<%= assets_path('favicon.png') %>" /> </head> - - <body> + + <body<%= ' data-branch-coverage=true' if branchable_result? %>> <div id="loading"> <img src="<%= assets_path('loading.gif') %>" alt="loading"/> </div> @@ -24,13 +24,13 @@ <%= formatted_file_list(name, files) %> <% end %> </div> - + <div id="footer"> - Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v<%= SimpleCov::VERSION %> + Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v<%= SimpleCov::VERSION %> and simplecov-html v<%= SimpleCov::Formatter::HTMLFormatter::VERSION %><br/> using <%= result.command_name %> </div> - + <div class="source_files"> <% result.source_files.each do |source_file| %> <%= formatted_source_file(source_file) %> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/views/source_file.erb new/views/source_file.erb --- old/views/source_file.erb 2017-08-14 07:37:10.000000000 +0200 +++ new/views/source_file.erb 2020-01-28 13:40:39.000000000 +0100 @@ -1,22 +1,53 @@ <div class="source_table" id="<%= id source_file %>"> <div class="header"> <h3><%= shortened_filename source_file %></h3> - <h4><span class="<%= coverage_css_class(source_file.covered_percent) %>"><%= source_file.covered_percent.round(2).to_s %> %</span> covered</h4> - <div> - <b><%= source_file.lines_of_code %></b> relevant lines. + <h4> + <%= covered_percent(source_file.covered_percent) %> + lines covered + </h4> + + <% if branchable_result? %> + <h4> + <%= covered_percent(source_file.branches_coverage_percent) %> + branches covered + </h4> + <% end %> + + <div class="t-line-summary"> + <b><%= source_file.lines_of_code %></b> relevant lines. <span class="green"><b><%= source_file.covered_lines.count %></b> lines covered</span> and <span class="red"><b><%= source_file.missed_lines.count %></b> lines missed.</span> </div> + + <% if branchable_result? %> + <div class="t-branch-summary"> + <span><b><%= source_file.total_branches.count %></b> total branches, </span> + <span class="green"><b><%= source_file.covered_branches.count %></b> branches covered</span> and + <span class="red"><b><%= source_file.missed_branches.count %></b> branches missed.</span> + </div> + <% end %> + </div> - + <pre> <ol> <% source_file.lines.each do |line| %> - <li class="<%= line.status %>" data-hits="<%= line.coverage ? line.coverage : '' %>" data-linenumber="<%= line.number %>"> - <% if line.covered? %><span class="hits"><%= line.coverage %></span><% end %> - <% if line.skipped? %><span class="hits">skipped</span><% end %> - <code class="ruby"><%= CGI.escapeHTML(line.src.chomp) %></code> - </li> + <div> + <li class="<%= line_status?(source_file, line) %>" data-hits="<%= line.coverage ? line.coverage : '' %>" data-linenumber="<%= line.number %>"> + <% if line.covered? %><span class="hits"><%= line.coverage %></span><% end %> + <% if line.skipped? %><span class="hits">skipped</span><% end %> + + <% if branchable_result? %> + <% source_file.branches_for_line(line.number).each do |branch_type, hit_count| %> + <span class="hits" title="<%= branch_type%> branch hit <%= hit_count %> times"> + <%= branch_type %>: <%= hit_count %> + </span> + <% end %> + <% end %> + + <code class="ruby"><%= CGI.escapeHTML(line.src.chomp) %></code> + </li> + </div> <% end %> </ol> </pre>