diff options
author | Austin Ziegler <austin@zieglers.ca> | 2022-07-05 15:43:30 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-05 15:43:30 -0400 |
commit | cab33a91e2894558b962b4b2236a213c6d63c54e (patch) | |
tree | fc14bc4c8a44e20026e1252a8cd435907d412ee1 | |
parent | 3062997fbbe19cb6099a65a5dbcd0aba7b9b17c7 (diff) | |
parent | 0270cb87e09dd444ad6822a777bb7999fd6f6e85 (diff) | |
download | diff-lcs-main.tar.gz |
Switch to standardrb formatting
-rw-r--r-- | .fasterer.yml | 5 | ||||
-rw-r--r-- | .github/workflows/codeql-analysis.yml | 58 | ||||
-rw-r--r-- | .standard.yml | 6 | ||||
-rw-r--r-- | Gemfile | 24 | ||||
-rw-r--r-- | History.md | 2 | ||||
-rw-r--r-- | Rakefile | 60 | ||||
-rwxr-xr-x | bin/htmldiff | 8 | ||||
-rw-r--r-- | lib/diff-lcs.rb | 2 | ||||
-rw-r--r-- | lib/diff/lcs.rb | 112 | ||||
-rw-r--r-- | lib/diff/lcs/array.rb | 2 | ||||
-rw-r--r-- | lib/diff/lcs/backports.rb | 4 | ||||
-rw-r--r-- | lib/diff/lcs/block.rb | 8 | ||||
-rw-r--r-- | lib/diff/lcs/callbacks.rb | 16 | ||||
-rw-r--r-- | lib/diff/lcs/change.rb | 38 | ||||
-rw-r--r-- | lib/diff/lcs/htmldiff.rb | 40 | ||||
-rw-r--r-- | lib/diff/lcs/hunk.rb | 57 | ||||
-rw-r--r-- | lib/diff/lcs/internals.rb | 34 | ||||
-rw-r--r-- | lib/diff/lcs/ldiff.rb | 68 | ||||
-rw-r--r-- | spec/change_spec.rb | 100 | ||||
-rw-r--r-- | spec/diff_spec.rb | 28 | ||||
-rw-r--r-- | spec/hunk_spec.rb | 38 | ||||
-rw-r--r-- | spec/issues_spec.rb | 88 | ||||
-rw-r--r-- | spec/lcs_spec.rb | 22 | ||||
-rw-r--r-- | spec/ldiff_spec.rb | 24 | ||||
-rw-r--r-- | spec/patch_spec.rb | 168 | ||||
-rw-r--r-- | spec/sdiff_spec.rb | 220 | ||||
-rw-r--r-- | spec/spec_helper.rb | 150 | ||||
-rw-r--r-- | spec/traverse_balanced_spec.rb | 380 | ||||
-rw-r--r-- | spec/traverse_sequences_spec.rb | 62 |
29 files changed, 937 insertions, 887 deletions
diff --git a/.fasterer.yml b/.fasterer.yml index 821e02d..eef484f 100644 --- a/.fasterer.yml +++ b/.fasterer.yml @@ -1,4 +1,3 @@ exclude_paths: - - lib/diff/lcs.rb # sort_vs_sort_by on priority_compare - - Rakefile # each_with_index vs while - - spec/spec_helper.rb + - research/**/* + - pkg/**/* diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2fe2010..a1548a1 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -9,14 +9,14 @@ # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # -name: "CodeQL" +name: 'CodeQL' on: push: - branches: [ master, main ] + branches: [main] pull_request: # The branches below must be a subset of the branches above - branches: [ master, main ] + branches: [main] schedule: - cron: '28 4 * * 2' @@ -32,39 +32,39 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'ruby' ] + language: ['ruby'] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://git.io/codeql-language-support steps: - - name: Checkout repository - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v2 - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 - # âšī¸ Command-line programs to run using the OS shell. - # đ https://git.io/JvXDl + # âšī¸ Command-line programs to run using the OS shell. + # đ https://git.io/JvXDl - # âī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language + # âī¸ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language - #- run: | - # make bootstrap - # make release + #- run: | + # make bootstrap + # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.standard.yml b/.standard.yml new file mode 100644 index 0000000..227fe7b --- /dev/null +++ b/.standard.yml @@ -0,0 +1,6 @@ +parallel: true +ruby_version: 2.0 +ignore: + - 'diff-lcs.gemspec' + - 'research/**/*' + - 'pkg/**/*' @@ -3,19 +3,23 @@ # NOTE: This file is present to keep Travis CI happy. Edits to it will not # be accepted. -source 'https://rubygems.org/' +source "https://rubygems.org/" -if RUBY_VERSION < '1.9' - gem 'hoe', '~> 3.20' - gem 'rake', '< 11' - gem 'rdoc', '< 4' +if RUBY_VERSION < "1.9" + gem "hoe", "~> 3.20" + gem "rake", "< 11" + gem "rdoc", "< 4" - gem 'ruby-debug' -elsif RUBY_VERSION >= '2.0' - if RUBY_ENGINE == 'ruby' - gem 'simplecov', '~> 0.18' + gem "ruby-debug" +end + +if RUBY_VERSION >= "2.0" + gem "standardrb" + gem "fasterer" - gem 'byebug' + if RUBY_ENGINE == "ruby" + gem "simplecov", "~> 0.18" + gem "byebug" end end @@ -4,6 +4,8 @@ - Updated the CI configuration, resolving [#82][]. +- Switched to standard ruby formatting. + ## 1.5.0 / 2021-12-23 - Updated the CI configuration and monkey-patch Hoe. @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'rubygems' -require 'rspec' -require 'rspec/core/rake_task' -require 'hoe' +require "rubygems" +require "rspec" +require "rspec/core/rake_task" +require "hoe" # This is required until https://github.com/seattlerb/hoe/issues/112 is fixed class Hoe @@ -45,66 +45,71 @@ Hoe.plugin :doofus Hoe.plugin :gemspec2 Hoe.plugin :git -if RUBY_VERSION < '1.9' - class Array #:nodoc: +if RUBY_VERSION < "1.9" + class Array # :nodoc: def to_h Hash[*flatten(1)] end end - class Gem::Specification #:nodoc: - def metadata=(*); end + class Gem::Specification # :nodoc: + def metadata=(*) + end - def default_value(*); end + def default_value(*) + end end - class Object #:nodoc: + class Object # :nodoc: def caller_locations(*) [] end end end -_spec = Hoe.spec 'diff-lcs' do - developer('Austin Ziegler', 'halostatue@gmail.com') +_spec = Hoe.spec "diff-lcs" do + developer("Austin Ziegler", "halostatue@gmail.com") - require_ruby_version '>= 1.8' + require_ruby_version ">= 1.8" - self.history_file = 'History.md' - self.readme_file = 'README.rdoc' - self.licenses = ['MIT', 'Artistic-2.0', 'GPL-2.0+'] + self.history_file = "History.md" + self.readme_file = "README.rdoc" + self.licenses = ["MIT", "Artistic-2.0", "GPL-2.0+"] - extra_dev_deps << ['hoe-doofus', '~> 1.0'] - extra_dev_deps << ['hoe-gemspec2', '~> 1.1'] - extra_dev_deps << ['hoe-git', '~> 1.6'] - extra_dev_deps << ['hoe-rubygems', '~> 1.0'] - extra_dev_deps << ['rspec', '>= 2.0', '< 4'] - extra_dev_deps << ['rake', '>= 10.0', '< 14'] - extra_dev_deps << ['rdoc', '>= 6.3.1', '< 7'] + extra_dev_deps << ["hoe-doofus", "~> 1.0"] + extra_dev_deps << ["hoe-gemspec2", "~> 1.1"] + extra_dev_deps << ["hoe-git", "~> 1.6"] + extra_dev_deps << ["hoe-rubygems", "~> 1.0"] + extra_dev_deps << ["rspec", ">= 2.0", "< 4"] + extra_dev_deps << ["rake", ">= 10.0", "< 14"] + extra_dev_deps << ["rdoc", ">= 6.3.1", "< 7"] end desc "Run all specifications" RSpec::Core::RakeTask.new(:spec) do |t| - rspec_dirs = %w(spec lib).join(":") + rspec_dirs = %w[spec lib].join(":") t.rspec_opts = ["-I#{rspec_dirs}"] end Rake::Task["spec"].actions.uniq! { |a| a.source_location } +# standard:disable Style/HashSyntax task :default => :spec unless Rake::Task["default"].prereqs.include?("spec") task :test => :spec unless Rake::Task["test"].prereqs.include?("spec") +# standard:enable Style/HashSyntax -if RUBY_VERSION >= '2.0' && RUBY_ENGINE == 'ruby' +if RUBY_VERSION >= "2.0" && RUBY_ENGINE == "ruby" namespace :spec do desc "Runs test coverage. Only works Ruby 2.0+ and assumes 'simplecov' is installed." task :coverage do - ENV['COVERAGE'] = 'yes' - Rake::Task['spec'].execute + ENV["COVERAGE"] = "yes" + Rake::Task["spec"].execute end end end task :ruby18 do + # standard:disable Layout/HeredocIndentation puts <<-MESSAGE You are starting a barebones Ruby 1.8 docker environment. You will need to do the following: @@ -117,5 +122,6 @@ do the following: Don't forget to restore your Gemfile.lock after testing. MESSAGE + # standard:enable Layout/HeredocIndentation sh "docker run -it --rm -v #{Dir.pwd}:/root/diff-lcs bellbind/docker-ruby18-rails2 bash -l" end diff --git a/bin/htmldiff b/bin/htmldiff index 14114a7..bcd89d2 100755 --- a/bin/htmldiff +++ b/bin/htmldiff @@ -1,11 +1,11 @@ #! /usr/bin/env ruby -w # frozen_string_literal: true -require 'diff/lcs' -require 'diff/lcs/htmldiff' +require "diff/lcs" +require "diff/lcs/htmldiff" begin - require 'text/format' + require "text/format" rescue LoadError Diff::LCS::HTMLDiff.can_expand_tabs = false end @@ -24,7 +24,7 @@ options = { :title => "diff #{ARGV[0]} #{ARGV[1]}" } htmldiff = Diff::LCS::HTMLDiff.new(left, right, options) if ARGV[2] - File.open(ARGV[2], 'w') do |f| + File.open(ARGV[2], "w") do |f| htmldiff.options[:output] = f htmldiff.run end diff --git a/lib/diff-lcs.rb b/lib/diff-lcs.rb index 250392f..bc07bf9 100644 --- a/lib/diff-lcs.rb +++ b/lib/diff-lcs.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require 'diff/lcs' +require "diff/lcs" diff --git a/lib/diff/lcs.rb b/lib/diff/lcs.rb index 288cfc2..54ef893 100644 --- a/lib/diff/lcs.rb +++ b/lib/diff/lcs.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module Diff; end unless defined? Diff # rubocop:disable Style/Documentation +module Diff; end unless defined? Diff # == How Diff Works (by Mark-Jason Dominus) # @@ -49,13 +49,13 @@ module Diff; end unless defined? Diff # rubocop:disable Style/Documentation # a x b y c z p d q # a b c a x b y c z module Diff::LCS - VERSION = '1.5.0' + VERSION = "1.5.0" end -require 'diff/lcs/callbacks' -require 'diff/lcs/internals' +require "diff/lcs/callbacks" +require "diff/lcs/internals" -module Diff::LCS # rubocop:disable Style/Documentation +module Diff::LCS # Returns an Array containing the longest common subsequence(s) between # +self+ and +other+. See Diff::LCS#lcs. # @@ -67,7 +67,7 @@ module Diff::LCS # rubocop:disable Style/Documentation # identically for key purposes. That is: # # O.new('a').eql?(O.new('a')) == true - def lcs(other, &block) #:yields self[i] if there are matched subsequences: + def lcs(other, &block) # :yields: self[i] if there are matched subsequences Diff::LCS.lcs(self, other, &block) end @@ -101,7 +101,7 @@ module Diff::LCS # rubocop:disable Style/Documentation def patch(patchset) Diff::LCS.patch(self, patchset) end - alias unpatch patch + alias_method :unpatch, :patch # Attempts to patch +self+ with the provided +patchset+. A new sequence based # on +self+ and the +patchset+ will be created. See Diff::LCS#patch. Does no @@ -141,11 +141,11 @@ module Diff::LCS # rubocop:disable Style/Documentation end class << Diff::LCS - def lcs(seq1, seq2, &block) #:yields seq1[i] for each matched: + def lcs(seq1, seq2, &block) # :yields: seq1[i] for each matched matches = Diff::LCS::Internals.lcs(seq1, seq2) ret = [] - string = seq1.kind_of? String - matches.each_with_index do |_e, i| + string = seq1.is_a? String + matches.each_index do |i| next if matches[i].nil? v = string ? seq1[i, 1] : seq1[i] @@ -154,7 +154,7 @@ class << Diff::LCS end ret end - alias LCS lcs + alias_method :LCS, :lcs # #diff computes the smallest set of additions and deletions necessary to # turn the first sequence into the second, and returns a description of these @@ -165,7 +165,7 @@ class << Diff::LCS # Class argument is provided for +callbacks+, #diff will attempt to # initialise it. If the +callbacks+ object (possibly initialised) responds to # #finish, it will be called. - def diff(seq1, seq2, callbacks = nil, &block) # :yields diff changes: + def diff(seq1, seq2, callbacks = nil, &block) # :yields: diff changes diff_traversal(:diff, seq1, seq2, callbacks || Diff::LCS::DiffCallbacks, &block) end @@ -197,7 +197,7 @@ class << Diff::LCS # # insert # end # end - def sdiff(seq1, seq2, callbacks = nil, &block) #:yields diff changes: + def sdiff(seq1, seq2, callbacks = nil, &block) # :yields: diff changes diff_traversal(:sdiff, seq1, seq2, callbacks || Diff::LCS::SDiffCallbacks, &block) end @@ -282,12 +282,12 @@ class << Diff::LCS # <tt>callbacks#discard_b</tt> will be called after the end of the sequence # is reached, if +a+ has not yet reached the end of +A+ or +b+ has not yet # reached the end of +B+. - def traverse_sequences(seq1, seq2, callbacks = Diff::LCS::SequenceCallbacks) #:yields change events: + def traverse_sequences(seq1, seq2, callbacks = Diff::LCS::SequenceCallbacks) # :yields: change events callbacks ||= Diff::LCS::SequenceCallbacks matches = Diff::LCS::Internals.lcs(seq1, seq2) run_finished_a = run_finished_b = false - string = seq1.kind_of?(String) + string = seq1.is_a?(String) a_size = seq1.size b_size = seq2.size @@ -299,7 +299,7 @@ class << Diff::LCS ax = string ? seq1[ai, 1] : seq1[ai] bx = string ? seq2[bj, 1] : seq2[bj] - event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_a(event) end @@ -310,13 +310,13 @@ class << Diff::LCS break unless bj < b_line bx = string ? seq2[bj, 1] : seq2[bj] - event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_b(event) bj += 1 end bx = string ? seq2[bj, 1] : seq2[bj] - event = Diff::LCS::ContextChange.new('=', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("=", ai, ax, bj, bx) event = yield event if block_given? callbacks.match(event) bj += 1 @@ -326,13 +326,13 @@ class << Diff::LCS # The last entry (if any) processed was a match. +ai+ and +bj+ point just # past the last matching lines in their sequences. - while (ai < a_size) or (bj < b_size) + while (ai < a_size) || (bj < b_size) # last A? - if ai == a_size and bj < b_size - if callbacks.respond_to?(:finished_a) and !run_finished_a + if ai == a_size && bj < b_size + if callbacks.respond_to?(:finished_a) && !run_finished_a ax = string ? seq1[-1, 1] : seq1[-1] bx = string ? seq2[bj, 1] : seq2[bj] - event = Diff::LCS::ContextChange.new('>', (a_size - 1), ax, bj, bx) + event = Diff::LCS::ContextChange.new(">", (a_size - 1), ax, bj, bx) event = yield event if block_given? callbacks.finished_a(event) run_finished_a = true @@ -340,7 +340,7 @@ class << Diff::LCS ax = string ? seq1[ai, 1] : seq1[ai] loop do bx = string ? seq2[bj, 1] : seq2[bj] - event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_b(event) bj += 1 @@ -350,11 +350,11 @@ class << Diff::LCS end # last B? - if bj == b_size and ai < a_size - if callbacks.respond_to?(:finished_b) and !run_finished_b + if bj == b_size && ai < a_size + if callbacks.respond_to?(:finished_b) && !run_finished_b ax = string ? seq1[ai, 1] : seq1[ai] bx = string ? seq2[-1, 1] : seq2[-1] - event = Diff::LCS::ContextChange.new('<', ai, ax, (b_size - 1), bx) + event = Diff::LCS::ContextChange.new("<", ai, ax, (b_size - 1), bx) event = yield event if block_given? callbacks.finished_b(event) run_finished_b = true @@ -362,7 +362,7 @@ class << Diff::LCS bx = string ? seq2[bj, 1] : seq2[bj] loop do ax = string ? seq1[ai, 1] : seq1[ai] - event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_a(event) ai += 1 @@ -374,7 +374,7 @@ class << Diff::LCS if ai < a_size ax = string ? seq1[ai, 1] : seq1[ai] bx = string ? seq2[bj, 1] : seq2[bj] - event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_a(event) ai += 1 @@ -383,7 +383,7 @@ class << Diff::LCS if bj < b_size ax = string ? seq1[ai, 1] : seq1[ai] bx = string ? seq2[bj, 1] : seq2[bj] - event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_b(event) bj += 1 @@ -478,14 +478,14 @@ class << Diff::LCS b_size = seq2.size ai = bj = mb = 0 ma = -1 - string = seq1.kind_of?(String) + string = seq1.is_a?(String) # Process all the lines in the match vector. loop do # Find next match indices +ma+ and +mb+ loop do ma += 1 - break unless ma < matches.size and matches[ma].nil? + break unless ma < matches.size && matches[ma].nil? end break if ma >= matches.size # end of matches? @@ -493,36 +493,36 @@ class << Diff::LCS mb = matches[ma] # Change(seq2) - while (ai < ma) or (bj < mb) + while (ai < ma) || (bj < mb) ax = string ? seq1[ai, 1] : seq1[ai] bx = string ? seq2[bj, 1] : seq2[bj] case [(ai < ma), (bj < mb)] when [true, true] if callbacks.respond_to?(:change) - event = Diff::LCS::ContextChange.new('!', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("!", ai, ax, bj, bx) event = yield event if block_given? callbacks.change(event) ai += 1 else - event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_a(event) ai += 1 ax = string ? seq1[ai, 1] : seq1[ai] - event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_b(event) end bj += 1 when [true, false] - event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_a(event) ai += 1 when [false, true] - event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_b(event) bj += 1 @@ -532,43 +532,43 @@ class << Diff::LCS # Match ax = string ? seq1[ai, 1] : seq1[ai] bx = string ? seq2[bj, 1] : seq2[bj] - event = Diff::LCS::ContextChange.new('=', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("=", ai, ax, bj, bx) event = yield event if block_given? callbacks.match(event) ai += 1 bj += 1 end - while (ai < a_size) or (bj < b_size) + while (ai < a_size) || (bj < b_size) ax = string ? seq1[ai, 1] : seq1[ai] bx = string ? seq2[bj, 1] : seq2[bj] case [(ai < a_size), (bj < b_size)] when [true, true] if callbacks.respond_to?(:change) - event = Diff::LCS::ContextChange.new('!', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("!", ai, ax, bj, bx) event = yield event if block_given? callbacks.change(event) ai += 1 else - event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_a(event) ai += 1 ax = string ? seq1[ai, 1] : seq1[ai] - event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_b(event) end bj += 1 when [true, false] - event = Diff::LCS::ContextChange.new('-', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_a(event) ai += 1 when [false, true] - event = Diff::LCS::ContextChange.new('+', ai, ax, bj, bx) + event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx) event = yield event if block_given? callbacks.discard_b(event) bj += 1 @@ -576,10 +576,12 @@ class << Diff::LCS end end - PATCH_MAP = { #:nodoc: - :patch => { '+' => '+', '-' => '-', '!' => '!', '=' => '=' }.freeze, - :unpatch => { '+' => '-', '-' => '+', '!' => '!', '=' => '=' }.freeze + # standard:disable Style/HashSyntax + PATCH_MAP = { # :nodoc: + :patch => {"+" => "+", "-" => "-", "!" => "!", "=" => "="}.freeze, + :unpatch => {"+" => "-", "-" => "+", "!" => "!", "=" => "="}.freeze }.freeze + # standard:enable Style/HashSyntax # Applies a +patchset+ to the sequence +src+ according to the +direction+ # (<tt>:patch</tt> or <tt>:unpatch</tt>), producing a new sequence. @@ -627,7 +629,7 @@ class << Diff::LCS return src.respond_to?(:dup) ? src.dup : src unless has_changes - string = src.kind_of?(String) + string = src.is_a?(String) # Start with a new empty type of the source's class res = src.class.new @@ -655,14 +657,14 @@ class << Diff::LCS end case action - when '-' # Remove details from the old string + when "-" # Remove details from the old string while ai < op res << (string ? src[ai, 1] : src[ai]) ai += 1 bj += 1 end ai += 1 - when '+' + when "+" while bj < np res << (string ? src[ai, 1] : src[ai]) ai += 1 @@ -671,7 +673,7 @@ class << Diff::LCS res << el bj += 1 - when '=' + when "=" # This only appears in sdiff output with the SDiff callback. # Therefore, we only need to worry about dealing with a single # element. @@ -679,7 +681,7 @@ class << Diff::LCS ai += 1 bj += 1 - when '!' + when "!" while ai < op res << (string ? src[ai, 1] : src[ai]) ai += 1 @@ -693,14 +695,14 @@ class << Diff::LCS end when Diff::LCS::Change case action - when '-' + when "-" while ai < change.position res << (string ? src[ai, 1] : src[ai]) ai += 1 bj += 1 end ai += 1 - when '+' + when "+" while bj < change.position res << (string ? src[ai, 1] : src[ai]) ai += 1 @@ -736,4 +738,4 @@ class << Diff::LCS end end -require 'diff/lcs/backports' +require "diff/lcs/backports" diff --git a/lib/diff/lcs/array.rb b/lib/diff/lcs/array.rb index 5c250f6..663918a 100644 --- a/lib/diff/lcs/array.rb +++ b/lib/diff/lcs/array.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'diff/lcs' +require "diff/lcs" class Array include Diff::LCS diff --git a/lib/diff/lcs/backports.rb b/lib/diff/lcs/backports.rb index 642fc9c..3d2a768 100644 --- a/lib/diff/lcs/backports.rb +++ b/lib/diff/lcs/backports.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true unless 0.respond_to?(:positive?) - class Fixnum # rubocop:disable Lint/UnifiedInteger, Style/Documentation + class Fixnum # standard:disable Lint/UnifiedInteger def positive? - self > 0 # rubocop:disable Style/NumericPredicate + self > 0 end end end diff --git a/lib/diff/lcs/block.rb b/lib/diff/lcs/block.rb index 430702d..226ed6f 100644 --- a/lib/diff/lcs/block.rb +++ b/lib/diff/lcs/block.rb @@ -25,13 +25,13 @@ class Diff::LCS::Block def op case [@remove.empty?, @insert.empty?] when [false, false] - '!' + "!" when [false, true] - '-' + "-" when [true, false] - '+' + "+" else # [true, true] - '^' + "^" end end end diff --git a/lib/diff/lcs/callbacks.rb b/lib/diff/lcs/callbacks.rb index 2a7665b..2c5a779 100644 --- a/lib/diff/lcs/callbacks.rb +++ b/lib/diff/lcs/callbacks.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'diff/lcs/change' +require "diff/lcs/change" -module Diff::LCS # rubocop:disable Style/Documentation +module Diff::LCS # This callback object implements the default set of callback events, # which only returns the event itself. Note that #finished_a and # #finished_b are not implemented -- I haven't yet figured out where they @@ -50,7 +50,9 @@ module Diff::LCS # rubocop:disable Style/Documentation BalancedCallbacks = DefaultCallbacks def self.callbacks_for(callbacks) - callbacks.new rescue callbacks + callbacks.new + rescue + callbacks end end @@ -107,7 +109,7 @@ class Diff::LCS::DiffCallbacks # Returns the difference set collected during the diff process. attr_reader :diffs - def initialize # :yields self: + def initialize # :yields: self @hunk = [] @diffs = [] @@ -131,11 +133,11 @@ class Diff::LCS::DiffCallbacks end def discard_a(event) - @hunk << Diff::LCS::Change.new('-', event.old_position, event.old_element) + @hunk << Diff::LCS::Change.new("-", event.old_position, event.old_element) end def discard_b(event) - @hunk << Diff::LCS::Change.new('+', event.new_position, event.new_element) + @hunk << Diff::LCS::Change.new("+", event.new_position, event.new_element) end def finish_hunk @@ -302,7 +304,7 @@ class Diff::LCS::SDiffCallbacks # Returns the difference set collected during the diff process. attr_reader :diffs - def initialize #:yields self: + def initialize # :yields: self @diffs = [] yield self if block_given? end diff --git a/lib/diff/lcs/change.rb b/lib/diff/lcs/change.rb index 76faf83..c86f102 100644 --- a/lib/diff/lcs/change.rb +++ b/lib/diff/lcs/change.rb @@ -10,7 +10,7 @@ class Diff::LCS::Change # (no change), '!' (changed), '<' (tail changes from first sequence), or # '>' (tail changes from second sequence). The last two ('<>') are only # found with Diff::LCS::diff and Diff::LCS::sdiff. - VALID_ACTIONS = %w(+ - = ! > <).freeze + VALID_ACTIONS = %w[+ - = ! > <].freeze def self.valid_action?(action) VALID_ACTIONS.include? action @@ -28,7 +28,7 @@ class Diff::LCS::Change @action, @position, @element = *args fail "Invalid Change Action '#{@action}'" unless Diff::LCS::Change.valid_action?(@action) - fail 'Invalid Position Type' unless @position.kind_of? IntClass + fail "Invalid Position Type" unless @position.is_a? IntClass end def inspect(*_args) @@ -39,7 +39,7 @@ class Diff::LCS::Change [@action, @position, @element] end - alias to_ary to_a + alias_method :to_ary, :to_a def self.from_a(arr) arr = arr.flatten(1) @@ -49,7 +49,7 @@ class Diff::LCS::Change when 3 Diff::LCS::Change.new(*(arr[0...3])) else - fail 'Invalid change array format provided.' + fail "Invalid change array format provided." end end @@ -70,27 +70,27 @@ class Diff::LCS::Change end def adding? - @action == '+' + @action == "+" end def deleting? - @action == '-' + @action == "-" end def unchanged? - @action == '=' + @action == "=" end def changed? - @action == '!' + @action == "!" end def finished_a? - @action == '>' + @action == ">" end def finished_b? - @action == '<' + @action == "<" end end @@ -115,8 +115,8 @@ class Diff::LCS::ContextChange < Diff::LCS::Change @action, @old_position, @old_element, @new_position, @new_element = *args fail "Invalid Change Action '#{@action}'" unless Diff::LCS::Change.valid_action?(@action) - fail 'Invalid (Old) Position Type' unless @old_position.nil? or @old_position.kind_of? IntClass - fail 'Invalid (New) Position Type' unless @new_position.nil? or @new_position.kind_of? IntClass + fail "Invalid (Old) Position Type" unless @old_position.nil? || @old_position.is_a?(IntClass) + fail "Invalid (New) Position Type" unless @new_position.nil? || @new_position.is_a?(IntClass) end def to_a @@ -127,7 +127,7 @@ class Diff::LCS::ContextChange < Diff::LCS::Change ] end - alias to_ary to_a + alias_method :to_ary, :to_a def self.from_a(arr) Diff::LCS::Change.from_a(arr) @@ -139,15 +139,15 @@ class Diff::LCS::ContextChange < Diff::LCS::Change ea = event.to_a case ea[0] - when '-' + when "-" ea[2][1] = nil - when '<' - ea[0] = '-' + when "<" + ea[0] = "-" ea[2][1] = nil - when '+' + when "+" ea[1][1] = nil - when '>' - ea[0] = '+' + when ">" + ea[0] = "+" ea[1][1] = nil end diff --git a/lib/diff/lcs/htmldiff.rb b/lib/diff/lcs/htmldiff.rb index f12220b..54adc2a 100644 --- a/lib/diff/lcs/htmldiff.rb +++ b/lib/diff/lcs/htmldiff.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'cgi' +require "cgi" # Produce a simple HTML diff view. class Diff::LCS::HTMLDiff class << self - attr_accessor :can_expand_tabs #:nodoc: + attr_accessor :can_expand_tabs # :nodoc: end self.can_expand_tabs = true - class Callbacks #:nodoc: + class Callbacks # :nodoc: attr_accessor :output attr_accessor :match_class attr_accessor :only_a_class @@ -19,14 +19,14 @@ class Diff::LCS::HTMLDiff @output = output options ||= {} - @match_class = options[:match_class] || 'match' - @only_a_class = options[:only_a_class] || 'only_a' - @only_b_class = options[:only_b_class] || 'only_b' + @match_class = options[:match_class] || "match" + @only_a_class = options[:only_a_class] || "only_a" + @only_b_class = options[:only_b_class] || "only_b" end def htmlize(element, css_class) - element = ' ' if element.empty? - %Q(<pre class="#{__send__(css_class)}">#{element}</pre>\n) + element = " " if element.empty? + %(<pre class="#{__send__(css_class)}">#{element}</pre>\n) end private :htmlize @@ -46,13 +46,16 @@ class Diff::LCS::HTMLDiff end end + # standard:disable Style/HashSyntax DEFAULT_OPTIONS = { :expand_tabs => nil, :output => nil, :css => nil, :title => nil }.freeze + # standard:enable Style/HashSyntax + # standard:disable Layout/HeredocIndentation DEFAULT_CSS = <<-CSS body { margin: 0; } .diff @@ -86,11 +89,12 @@ pre } h1 { margin-left: 2em; } CSS + # standard:enable Layout/HeredocIndentation def initialize(left, right, options = nil) - @left = left - @right = right - @options = options + @left = left + @right = right + @options = options @options = DEFAULT_OPTIONS.dup if @options.nil? end @@ -103,7 +107,7 @@ h1 { margin-left: 2em; } @options[:css] ||= DEFAULT_CSS.dup - @options[:title] ||= 'diff' + @options[:title] ||= "diff" end private :verify_options @@ -116,13 +120,14 @@ h1 { margin-left: 2em; } formatter = Text::Format.new formatter.tabstop = @options[:expand_tabs] - @left.map! do |line| formatter.expand(line.chomp) end - @right.map! do |line| formatter.expand(line.chomp) end + @left.map! { |line| formatter.expand(line.chomp) } + @right.map! { |line| formatter.expand(line.chomp) } end - @left.map! do |line| CGI.escapeHTML(line.chomp) end - @right.map! do |line| CGI.escapeHTML(line.chomp) end + @left.map! { |line| CGI.escapeHTML(line.chomp) } + @right.map! { |line| CGI.escapeHTML(line.chomp) } + # standard:disable Layout/HeredocIndentation @options[:output] << <<-OUTPUT <html> <head> @@ -137,14 +142,17 @@ h1 { margin-left: 2em; } <span class="only_b">Only in New</span></p> <div class="diff"> OUTPUT + # standard:enable Layout/HeredocIndentation callbacks = Callbacks.new(@options[:output]) Diff::LCS.traverse_sequences(@left, @right, callbacks) + # standard:disable Layout/HeredocIndentation @options[:output] << <<-OUTPUT </div> </body> </html> OUTPUT + # standard:enable Layout/HeredocIndentation end end diff --git a/lib/diff/lcs/hunk.rb b/lib/diff/lcs/hunk.rb index 49b520e..2cef5ed 100644 --- a/lib/diff/lcs/hunk.rb +++ b/lib/diff/lcs/hunk.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'diff/lcs/block' +require "diff/lcs/block" # A Hunk is a group of Blocks which overlap because of the context surrounding # each block. (So if we're not using context, every hunk will contain one # block.) Used in the diff program (bin/ldiff). class Diff::LCS::Hunk - OLD_DIFF_OP_ACTION = { '+' => 'a', '-' => 'd', '!' => 'c' }.freeze #:nodoc: - ED_DIFF_OP_ACTION = { '+' => 'a', '-' => 'd', '!' => 'c' }.freeze #:nodoc: + OLD_DIFF_OP_ACTION = {"+" => "a", "-" => "d", "!" => "c"}.freeze # :nodoc: + ED_DIFF_OP_ACTION = {"+" => "a", "-" => "d", "!" => "c"}.freeze # :nodoc: private_constant :OLD_DIFF_OP_ACTION, :ED_DIFF_OP_ACTION if respond_to?(:private_constant) @@ -22,7 +22,7 @@ class Diff::LCS::Hunk end if String.method_defined?(:encoding) - @preferred_data_encoding = data_old.fetch(0, data_new.fetch(0, '')).encoding + @preferred_data_encoding = data_old.fetch(0) { data_new.fetch(0, "") }.encoding end @data_old = data_old @@ -33,7 +33,6 @@ class Diff::LCS::Hunk @file_length_difference = after # The caller must get this manually @max_diff_size = @blocks.map { |e| e.diff_size.abs }.max - # Save the start & end of each array. If the array doesn't exist (e.g., # we're only adding items in this block), then figure out the line number # based on the line number of the other file and the current difference in @@ -54,8 +53,8 @@ class Diff::LCS::Hunk @start_old = a1 || (b1 - before) @start_new = b1 || (a1 + before) - @end_old = a2 || (b2 - after) - @end_new = b2 || (a2 + after) + @end_old = a2 || (b2 - after) + @end_new = b2 || (a2 + after) self.flag_context = flag_context end @@ -67,10 +66,10 @@ class Diff::LCS::Hunk # Change the "start" and "end" fields to note that context should be added # to this hunk. - attr_accessor :flag_context # rubocop:disable Layout/EmptyLinesAroundAttributeAccessor + attr_accessor :flag_context undef :flag_context= - def flag_context=(context) #:nodoc: # rubocop:disable Lint/DuplicateMethods - return if context.nil? or context.zero? + def flag_context=(context) # :nodoc: # standard:disable Lint/DuplicateMethods + return if context.nil? || context.zero? add_start = context > @start_old ? @start_old : context @@ -102,7 +101,7 @@ class Diff::LCS::Hunk @start_new = hunk.start_new blocks.unshift(*hunk.blocks) end - alias unshift merge + alias_method :unshift, :merge # Determines whether there is an overlap between this hunk and the # provided hunk. This will be true if the difference between the two hunks @@ -133,24 +132,24 @@ class Diff::LCS::Hunk # Note that an old diff can't have any context. Therefore, we know that # there's only one block in the hunk. def old_diff(_last = false) - warn 'Expecting only one block in an old diff hunk!' if @blocks.size > 1 + warn "Expecting only one block in an old diff hunk!" if @blocks.size > 1 block = @blocks[0] # Calculate item number range. Old diff range is just like a context # diff range, except the ranges are on one line with the action between # them. - s = encode("#{context_range(:old, ',')}#{OLD_DIFF_OP_ACTION[block.op]}#{context_range(:new, ',')}\n") + s = encode("#{context_range(:old, ",")}#{OLD_DIFF_OP_ACTION[block.op]}#{context_range(:new, ",")}\n") # If removing anything, just print out all the remove lines in the hunk # which is just all the remove lines in the block. unless block.remove.empty? - @data_old[@start_old..@end_old].each { |e| s << encode('< ') + e.chomp + encode("\n") } + @data_old[@start_old..@end_old].each { |e| s << encode("< ") + e.chomp + encode("\n") } end - s << encode("---\n") if block.op == '!' + s << encode("---\n") if block.op == "!" unless block.insert.empty? - @data_new[@start_new..@end_new].each { |e| s << encode('> ') + e.chomp + encode("\n") } + @data_new[@start_new..@end_new].each { |e| s << encode("> ") + e.chomp + encode("\n") } end s @@ -172,7 +171,9 @@ class Diff::LCS::Hunk # file -- don't take removed items into account. lo, hi, num_added, num_removed = @start_old, @end_old, 0, 0 - outlist = @data_old[lo..hi].map { |e| String.new("#{encode(' ')}#{e.chomp}") } + # standard:disable Performance/UnfreezeString + outlist = @data_old[lo..hi].map { |e| String.new("#{encode(" ")}#{e.chomp}") } + # standard:enable Performance/UnfreezeString last_block = blocks[-1] @@ -183,7 +184,7 @@ class Diff::LCS::Hunk @blocks.each do |block| block.remove.each do |item| - op = item.action.to_s # - + op = item.action.to_s # - offset = item.position - lo + num_added outlist[offset][0, 1] = encode(op) num_removed += 1 @@ -195,7 +196,7 @@ class Diff::LCS::Hunk end block.insert.each do |item| - op = item.action.to_s # + + op = item.action.to_s # + offset = item.position - @start_new + num_removed outlist[offset, 0] = encode(op) + @data_new[item.position].chomp num_added += 1 @@ -212,8 +213,8 @@ class Diff::LCS::Hunk def context_diff(last = false) s = encode("***************\n") - s << encode("*** #{context_range(:old, ',', last)} ****\n") - r = context_range(:new, ',', last) + s << encode("*** #{context_range(:old, ",", last)} ****\n") + r = context_range(:new, ",", last) if last old_missing_newline = missing_last_newline?(@data_old) @@ -226,7 +227,9 @@ class Diff::LCS::Hunk removes = @blocks.reject { |e| e.remove.empty? } unless removes.empty? - outlist = @data_old[lo..hi].map { |e| String.new("#{encode(' ')}#{e.chomp}") } + # standard:disable Performance/UnfreezeString + outlist = @data_old[lo..hi].map { |e| String.new("#{encode(" ")}#{e.chomp}") } + # standard:enable Performance/UnfreezeString last_block = removes[-1] @@ -248,7 +251,9 @@ class Diff::LCS::Hunk inserts = @blocks.reject { |e| e.insert.empty? } unless inserts.empty? - outlist = @data_new[lo..hi].map { |e| String.new("#{encode(' ')}#{e.chomp}") } + # standard:disable Performance/UnfreezeString + outlist = @data_new[lo..hi].map { |e| String.new("#{encode(" ")}#{e.chomp}") } + # standard:enable Performance/UnfreezeString last_block = inserts[-1] @@ -269,13 +274,13 @@ class Diff::LCS::Hunk private :context_diff def ed_diff(format, _last = false) - warn 'Expecting only one block in an old diff hunk!' if @blocks.size > 1 + warn "Expecting only one block in an old diff hunk!" if @blocks.size > 1 s = if format == :reverse_ed - encode("#{ED_DIFF_OP_ACTION[@blocks[0].op]}#{context_range(:old, ',')}\n") + encode("#{ED_DIFF_OP_ACTION[@blocks[0].op]}#{context_range(:old, ",")}\n") else - encode("#{context_range(:old, ' ')}#{ED_DIFF_OP_ACTION[@blocks[0].op]}\n") + encode("#{context_range(:old, " ")}#{ED_DIFF_OP_ACTION[@blocks[0].op]}\n") end unless @blocks[0].insert.empty? diff --git a/lib/diff/lcs/internals.rb b/lib/diff/lcs/internals.rb index ef77667..8a9160a 100644 --- a/lib/diff/lcs/internals.rb +++ b/lib/diff/lcs/internals.rb @@ -13,7 +13,7 @@ class << Diff::LCS if block callbacks.diffs.map do |hunk| - if hunk.kind_of? Array + if hunk.is_a? Array hunk.map { |hunk_block| block[hunk_block] } else block[hunk] @@ -45,14 +45,14 @@ class << Diff::LCS::Internals vector = [] # Collect any common elements at the beginning... - while (a_start <= a_finish) and (b_start <= b_finish) and (a[a_start] == b[b_start]) + while (a_start <= a_finish) && (b_start <= b_finish) && (a[a_start] == b[b_start]) vector[a_start] = b_start a_start += 1 b_start += 1 end # Now the end... - while (a_start <= a_finish) and (b_start <= b_finish) and (a[a_finish] == b[b_finish]) + while (a_start <= a_finish) && (b_start <= b_finish) && (a[a_finish] == b[b_finish]) vector[a_finish] = b_finish a_finish -= 1 b_finish -= 1 @@ -63,8 +63,8 @@ class << Diff::LCS::Internals b_matches = position_hash(b, b_start..b_finish) thresh = [] - links = [] - string = a.kind_of?(String) + links = [] + string = a.is_a?(String) (a_start..a_finish).each do |i| ai = string ? a[i, 1] : a[i] @@ -75,7 +75,7 @@ class << Diff::LCS::Internals # it may have an optimization purpose # An attempt to remove it: https://github.com/halostatue/diff-lcs/pull/72 # Why it is reintroduced: https://github.com/halostatue/diff-lcs/issues/78 - if k and (thresh[k] > j) and (thresh[k - 1] < j) + if k && (thresh[k] > j) && (thresh[k - 1] < j) thresh[k] = j else k = replace_next_larger(thresh, j, k) @@ -100,7 +100,7 @@ class << Diff::LCS::Internals # the object form of same) and detection of whether the patchset represents # changes to be made. def analyze_patchset(patchset, depth = 0) - fail 'Patchset too complex' if depth > 1 + fail "Patchset too complex" if depth > 1 has_changes = false new_patchset = [] @@ -145,7 +145,7 @@ class << Diff::LCS::Internals # Diff::LCS::Change as its source, as an array will cause the creation # of one of the above. def intuit_diff_direction(src, patchset, limit = nil) - string = src.kind_of?(String) + string = src.is_a?(String) count = left_match = left_miss = right_match = right_miss = 0 patchset.each do |change| @@ -157,22 +157,22 @@ class << Diff::LCS::Internals re = string ? src[change.new_position, 1] : src[change.new_position] case change.action - when '-' # Remove details from the old string + when "-" # Remove details from the old string if le == change.old_element left_match += 1 else left_miss += 1 end - when '+' + when "+" if re == change.new_element right_match += 1 else right_miss += 1 end - when '=' + when "=" left_miss += 1 if le != change.old_element right_miss += 1 if re != change.new_element - when '!' + when "!" if le == change.old_element left_match += 1 elsif re == change.new_element @@ -189,19 +189,19 @@ class << Diff::LCS::Internals element = string ? src[change.position, 1] : src[change.position] case change.action - when '-' + when "-" if element == change.element left_match += 1 else left_miss += 1 end - when '+' + when "+" if element == change.element right_match += 1 else right_miss += 1 end - when '=' + when "=" if element != change.element left_miss += 1 right_miss += 1 @@ -251,7 +251,7 @@ enumerable as either source or destination value." # This operation preserves the sort order. def replace_next_larger(enum, value, last_index = nil) # Off the end? - if enum.empty? or (value > enum[-1]) + if enum.empty? || (value > enum[-1]) enum << value return enum.size - 1 end @@ -296,7 +296,7 @@ enumerable as either source or destination value." # positions it occupies in the Enumerable, optionally restricted to the # elements specified in the range of indexes specified by +interval+. def position_hash(enum, interval) - string = enum.kind_of?(String) + string = enum.is_a?(String) hash = Hash.new { |h, k| h[k] = [] } interval.each do |i| k = string ? enum[i, 1] : enum[i] diff --git a/lib/diff/lcs/ldiff.rb b/lib/diff/lcs/ldiff.rb index 17b374c..961458c 100644 --- a/lib/diff/lcs/ldiff.rb +++ b/lib/diff/lcs/ldiff.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true -require 'optparse' -require 'ostruct' -require 'diff/lcs/hunk' +require "optparse" +require "ostruct" +require "diff/lcs/hunk" -module Diff::LCS::Ldiff #:nodoc: +module Diff::LCS::Ldiff # :nodoc: + # standard:disable Layout/HeredocIndentation BANNER = <<-COPYRIGHT ldiff #{Diff::LCS::VERSION} Copyright 2004-2019 Austin Ziegler @@ -16,60 +17,61 @@ ldiff #{Diff::LCS::VERSION} the terms of the GPL version 2 (or later), the Perl Artistic licence, or the MIT licence. COPYRIGHT + # standard:enable Layout/HeredocIndentation end class << Diff::LCS::Ldiff - attr_reader :format, :lines #:nodoc: - attr_reader :file_old, :file_new #:nodoc: - attr_reader :data_old, :data_new #:nodoc: + attr_reader :format, :lines # :nodoc: + attr_reader :file_old, :file_new # :nodoc: + attr_reader :data_old, :data_new # :nodoc: - def run(args, _input = $stdin, output = $stdout, error = $stderr) #:nodoc: + def run(args, _input = $stdin, output = $stdout, error = $stderr) # :nodoc: @binary = nil args.options do |o| o.banner = "Usage: #{File.basename($0)} [options] oldfile newfile" - o.separator '' + o.separator "" o.on( - '-c', '-C', '--context [LINES]', Integer, - 'Displays a context diff with LINES lines', 'of context. Default 3 lines.' + "-c", "-C", "--context [LINES]", Integer, + "Displays a context diff with LINES lines", "of context. Default 3 lines." ) do |ctx| @format = :context - @lines = ctx || 3 + @lines = ctx || 3 end o.on( - '-u', '-U', '--unified [LINES]', Integer, - 'Displays a unified diff with LINES lines', 'of context. Default 3 lines.' + "-u", "-U", "--unified [LINES]", Integer, + "Displays a unified diff with LINES lines", "of context. Default 3 lines." ) do |ctx| @format = :unified - @lines = ctx || 3 + @lines = ctx || 3 end - o.on('-e', 'Creates an \'ed\' script to change', 'oldfile to newfile.') do |_ctx| + o.on("-e", "Creates an 'ed' script to change", "oldfile to newfile.") do |_ctx| @format = :ed end - o.on('-f', 'Creates an \'ed\' script to change', 'oldfile to newfile in reverse order.') do |_ctx| + o.on("-f", "Creates an 'ed' script to change", "oldfile to newfile in reverse order.") do |_ctx| @format = :reverse_ed end o.on( - '-a', '--text', - 'Treat the files as text and compare them', 'line-by-line, even if they do not seem', 'to be text.' + "-a", "--text", + "Treat the files as text and compare them", "line-by-line, even if they do not seem", "to be text." ) do |_txt| @binary = false end - o.on('--binary', 'Treats the files as binary.') do |_bin| + o.on("--binary", "Treats the files as binary.") do |_bin| @binary = true end - o.on('-q', '--brief', 'Report only whether or not the files', 'differ, not the details.') do |_ctx| + o.on("-q", "--brief", "Report only whether or not the files", "differ, not the details.") do |_ctx| @format = :report end - o.on_tail('--help', 'Shows this text.') do + o.on_tail("--help", "Shows this text.") do error << o return 0 end - o.on_tail('--version', 'Shows the version of Diff::LCS.') do + o.on_tail("--version", "Shows the version of Diff::LCS.") do error << Diff::LCS::Ldiff::BANNER return 0 end - o.on_tail '' + o.on_tail "" o.on_tail 'By default, runs produces an "old-style" diff, with output like UNIX diff.' o.parse! end @@ -81,17 +83,17 @@ class << Diff::LCS::Ldiff # Defaults are for old-style diff @format ||= :old - @lines ||= 0 + @lines ||= 0 file_old, file_new = *ARGV case @format when :context - char_old = '*' * 3 - char_new = '-' * 3 + char_old = "*" * 3 + char_new = "-" * 3 when :unified - char_old = '-' * 3 - char_new = '+' * 3 + char_old = "-" * 3 + char_new = "+" * 3 end # After we've read up to a certain point in each file, the number of @@ -128,10 +130,10 @@ class << Diff::LCS::Ldiff return 1 end - if (@format == :unified) or (@format == :context) - ft = File.stat(file_old).mtime.localtime.strftime('%Y-%m-%d %H:%M:%S.000000000 %z') + if (@format == :unified) || (@format == :context) + ft = File.stat(file_old).mtime.localtime.strftime("%Y-%m-%d %H:%M:%S.000000000 %z") output << "#{char_old} #{file_old}\t#{ft}\n" - ft = File.stat(file_new).mtime.localtime.strftime('%Y-%m-%d %H:%M:%S.000000000 %z') + ft = File.stat(file_new).mtime.localtime.strftime("%Y-%m-%d %H:%M:%S.000000000 %z") output << "#{char_new} #{file_new}\t#{ft}\n" end @@ -150,7 +152,7 @@ class << Diff::LCS::Ldiff file_length_difference = hunk.file_length_difference next unless oldhunk - next if @lines.positive? and hunk.merge(oldhunk) + next if @lines.positive? && hunk.merge(oldhunk) output << oldhunk.diff(@format) output << "\n" if @format == :unified diff --git a/spec/change_spec.rb b/spec/change_spec.rb index b8d3443..42533ae 100644 --- a/spec/change_spec.rb +++ b/spec/change_spec.rb @@ -1,89 +1,89 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" describe Diff::LCS::Change do - describe 'an add' do - subject { described_class.new('+', 0, 'element') } - it { should_not be_deleting } - it { should be_adding } - it { should_not be_unchanged } - it { should_not be_changed } + describe "an add" do + subject { described_class.new("+", 0, "element") } + it { should_not be_deleting } + it { should be_adding } + it { should_not be_unchanged } + it { should_not be_changed } it { should_not be_finished_a } it { should_not be_finished_b } end - describe 'a delete' do - subject { described_class.new('-', 0, 'element') } - it { should be_deleting } - it { should_not be_adding } - it { should_not be_unchanged } - it { should_not be_changed } + describe "a delete" do + subject { described_class.new("-", 0, "element") } + it { should be_deleting } + it { should_not be_adding } + it { should_not be_unchanged } + it { should_not be_changed } it { should_not be_finished_a } it { should_not be_finished_b } end - describe 'an unchanged' do - subject { described_class.new('=', 0, 'element') } - it { should_not be_deleting } - it { should_not be_adding } - it { should be_unchanged } - it { should_not be_changed } + describe "an unchanged" do + subject { described_class.new("=", 0, "element") } + it { should_not be_deleting } + it { should_not be_adding } + it { should be_unchanged } + it { should_not be_changed } it { should_not be_finished_a } it { should_not be_finished_b } end - describe 'a changed' do - subject { described_class.new('!', 0, 'element') } - it { should_not be_deleting } - it { should_not be_adding } - it { should_not be_unchanged } - it { should be_changed } + describe "a changed" do + subject { described_class.new("!", 0, "element") } + it { should_not be_deleting } + it { should_not be_adding } + it { should_not be_unchanged } + it { should be_changed } it { should_not be_finished_a } it { should_not be_finished_b } end - describe 'a finished_a' do - subject { described_class.new('>', 0, 'element') } - it { should_not be_deleting } - it { should_not be_adding } - it { should_not be_unchanged } - it { should_not be_changed } - it { should be_finished_a } + describe "a finished_a" do + subject { described_class.new(">", 0, "element") } + it { should_not be_deleting } + it { should_not be_adding } + it { should_not be_unchanged } + it { should_not be_changed } + it { should be_finished_a } it { should_not be_finished_b } end - describe 'a finished_b' do - subject { described_class.new('<', 0, 'element') } - it { should_not be_deleting } - it { should_not be_adding } - it { should_not be_unchanged } - it { should_not be_changed } + describe "a finished_b" do + subject { described_class.new("<", 0, "element") } + it { should_not be_deleting } + it { should_not be_adding } + it { should_not be_unchanged } + it { should_not be_changed } it { should_not be_finished_a } - it { should be_finished_b } + it { should be_finished_b } end - describe 'as array' do - it 'should be converted' do - action, position, element = described_class.new('!', 0, 'element') - expect(action).to eq '!' + describe "as array" do + it "should be converted" do + action, position, element = described_class.new("!", 0, "element") + expect(action).to eq "!" expect(position).to eq 0 - expect(element).to eq 'element' + expect(element).to eq "element" end end end describe Diff::LCS::ContextChange do - describe 'as array' do - it 'should be converted' do + describe "as array" do + it "should be converted" do action, (old_position, old_element), (new_position, new_element) = - described_class.new('!', 1, 'old_element', 2, 'new_element') + described_class.new("!", 1, "old_element", 2, "new_element") - expect(action).to eq '!' + expect(action).to eq "!" expect(old_position).to eq 1 - expect(old_element).to eq 'old_element' + expect(old_element).to eq "old_element" expect(new_position).to eq 2 - expect(new_element).to eq 'new_element' + expect(new_element).to eq "new_element" end end end diff --git a/spec/diff_spec.rb b/spec/diff_spec.rb index e7d632a..869f098 100644 --- a/spec/diff_spec.rb +++ b/spec/diff_spec.rb @@ -1,28 +1,28 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe Diff::LCS, '.diff' do +describe Diff::LCS, ".diff" do include Diff::LCS::SpecHelper::Matchers - it 'correctly diffs seq1 to seq2' do + it "correctly diffs seq1 to seq2" do diff_s1_s2 = Diff::LCS.diff(seq1, seq2) expect(change_diff(correct_forward_diff)).to eq(diff_s1_s2) end - it 'correctly diffs seq2 to seq1' do + it "correctly diffs seq2 to seq1" do diff_s2_s1 = Diff::LCS.diff(seq2, seq1) expect(change_diff(correct_backward_diff)).to eq(diff_s2_s1) end - it 'correctly diffs against an empty sequence' do + it "correctly diffs against an empty sequence" do diff = Diff::LCS.diff(word_sequence, []) correct_diff = [ [ - ['-', 0, 'abcd'], - ['-', 1, 'efgh'], - ['-', 2, 'ijkl'], - ['-', 3, 'mnopqrstuvwxyz'] + ["-", 0, "abcd"], + ["-", 1, "efgh"], + ["-", 2, "ijkl"], + ["-", 3, "mnopqrstuvwxyz"] ] ] @@ -30,22 +30,22 @@ describe Diff::LCS, '.diff' do diff = Diff::LCS.diff([], word_sequence) correct_diff.each do |hunk| - hunk.each do |change| change[0] = '+' end + hunk.each { |change| change[0] = "+" } end expect(change_diff(correct_diff)).to eq(diff) end it "correctly diffs 'xx' and 'xaxb'" do - left = 'xx' - right = 'xaxb' + left = "xx" + right = "xaxb" expect(Diff::LCS.patch(left, Diff::LCS.diff(left, right))).to eq(right) end - it 'returns an empty diff with (hello, hello)' do + it "returns an empty diff with (hello, hello)" do expect(Diff::LCS.diff(hello, hello)).to be_empty end - it 'returns an empty diff with (hello_ary, hello_ary)' do + it "returns an empty diff with (hello_ary, hello_ary)" do expect(Diff::LCS.diff(hello_ary, hello_ary)).to be_empty end end diff --git a/spec/hunk_spec.rb b/spec/hunk_spec.rb index b3616bf..c52a6fd 100644 --- a/spec/hunk_spec.rb +++ b/spec/hunk_spec.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" if String.method_defined?(:encoding) - require 'diff/lcs/hunk' + require "diff/lcs/hunk" describe Diff::LCS::Hunk do - let(:old_data) { ['Tu a un cartÊ avec {count} itÊms'.encode('UTF-16LE')] } - let(:new_data) { ['Tu a un carte avec {count} items'.encode('UTF-16LE')] } - let(:pieces) { Diff::LCS.diff old_data, new_data } - let(:hunk) { Diff::LCS::Hunk.new(old_data, new_data, pieces[0], 3, 0) } + let(:old_data) { ["Tu a un cartÊ avec {count} itÊms".encode("UTF-16LE")] } + let(:new_data) { ["Tu a un carte avec {count} items".encode("UTF-16LE")] } + let(:pieces) { Diff::LCS.diff old_data, new_data } + let(:hunk) { Diff::LCS::Hunk.new(old_data, new_data, pieces[0], 3, 0) } - it 'produces a unified diff from the two pieces' do - expected = <<-EXPECTED.gsub(/^\s+/, '').encode('UTF-16LE').chomp + it "produces a unified diff from the two pieces" do + expected = <<-EXPECTED.gsub(/^\s+/, "").encode("UTF-16LE").chomp @@ -1 +1 @@ -Tu a un cartÊ avec {count} itÊms +Tu a un carte avec {count} items @@ -21,8 +21,8 @@ if String.method_defined?(:encoding) expect(hunk.diff(:unified)).to eq(expected) end - it 'produces a unified diff from the two pieces (last entry)' do - expected = <<-EXPECTED.gsub(/^\s+/, '').encode('UTF-16LE').chomp + it "produces a unified diff from the two pieces (last entry)" do + expected = <<-EXPECTED.gsub(/^\s+/, "").encode("UTF-16LE").chomp @@ -1 +1 @@ -Tu a un cartÊ avec {count} itÊms +Tu a un carte avec {count} items @@ -32,8 +32,8 @@ if String.method_defined?(:encoding) expect(hunk.diff(:unified, true)).to eq(expected) end - it 'produces a context diff from the two pieces' do - expected = <<-EXPECTED.gsub(/^\s+/, '').encode('UTF-16LE').chomp + it "produces a context diff from the two pieces" do + expected = <<-EXPECTED.gsub(/^\s+/, "").encode("UTF-16LE").chomp *************** *** 1 **** ! Tu a un cartÊ avec {count} itÊms @@ -44,8 +44,8 @@ if String.method_defined?(:encoding) expect(hunk.diff(:context)).to eq(expected) end - it 'produces an old diff from the two pieces' do - expected = <<-EXPECTED.gsub(/^ +/, '').encode('UTF-16LE').chomp + it "produces an old diff from the two pieces" do + expected = <<-EXPECTED.gsub(/^ +/, "").encode("UTF-16LE").chomp 1c1 < Tu a un cartÊ avec {count} itÊms --- @@ -56,8 +56,8 @@ if String.method_defined?(:encoding) expect(hunk.diff(:old)).to eq(expected) end - it 'produces a reverse ed diff from the two pieces' do - expected = <<-EXPECTED.gsub(/^ +/, '').encode('UTF-16LE').chomp + it "produces a reverse ed diff from the two pieces" do + expected = <<-EXPECTED.gsub(/^ +/, "").encode("UTF-16LE").chomp c1 Tu a un carte avec {count} items . @@ -67,11 +67,11 @@ if String.method_defined?(:encoding) expect(hunk.diff(:reverse_ed)).to eq(expected) end - context 'with empty first data set' do + context "with empty first data set" do let(:old_data) { [] } - it 'produces a unified diff' do - expected = <<-EXPECTED.gsub(/^\s+/, '').encode('UTF-16LE').chomp + it "produces a unified diff" do + expected = <<-EXPECTED.gsub(/^\s+/, "").encode("UTF-16LE").chomp @@ -1 +1,2 @@ +Tu a un carte avec {count} items EXPECTED diff --git a/spec/issues_spec.rb b/spec/issues_spec.rb index ad73123..3451d71 100644 --- a/spec/issues_spec.rb +++ b/spec/issues_spec.rb @@ -1,73 +1,76 @@ # frozen_string_literal: true -require 'spec_helper' -require 'diff/lcs/hunk' +require "spec_helper" +require "diff/lcs/hunk" -describe 'Diff::LCS Issues' do +describe "Diff::LCS Issues" do include Diff::LCS::SpecHelper::Matchers - describe 'issue #1' do - shared_examples 'handles simple diffs' do |s1, s2, forward_diff| + describe "issue #1" do + shared_examples "handles simple diffs" do |s1, s2, forward_diff| before do @diff_s1_s2 = Diff::LCS.diff(s1, s2) end - it 'creates the correct diff' do + it "creates the correct diff" do expect(change_diff(forward_diff)).to eq(@diff_s1_s2) end - it 'creates the correct patch s1->s2' do + it "creates the correct patch s1->s2" do expect(Diff::LCS.patch(s1, @diff_s1_s2)).to eq(s2) end - it 'creates the correct patch s2->s1' do + it "creates the correct patch s2->s1" do expect(Diff::LCS.patch(s2, @diff_s1_s2)).to eq(s1) end end - describe 'string' do - it_has_behavior 'handles simple diffs', 'aX', 'bXaX', [ + describe "string" do + it_has_behavior "handles simple diffs", "aX", "bXaX", [ [ - ['+', 0, 'b'], - ['+', 1, 'X'] + ["+", 0, "b"], + ["+", 1, "X"] ] ] - it_has_behavior 'handles simple diffs', 'bXaX', 'aX', [ + it_has_behavior "handles simple diffs", "bXaX", "aX", [ [ - ['-', 0, 'b'], - ['-', 1, 'X'] + ["-", 0, "b"], + ["-", 1, "X"] ] ] end - describe 'array' do - it_has_behavior 'handles simple diffs', %w(a X), %w(b X a X), [ + describe "array" do + it_has_behavior "handles simple diffs", %w[a X], %w[b X a X], [ [ - ['+', 0, 'b'], - ['+', 1, 'X'] + ["+", 0, "b"], + ["+", 1, "X"] ] ] - it_has_behavior 'handles simple diffs', %w(b X a X), %w(a X), [ + it_has_behavior "handles simple diffs", %w[b X a X], %w[a X], [ [ - ['-', 0, 'b'], - ['-', 1, 'X'] + ["-", 0, "b"], + ["-", 1, "X"] ] ] end end - describe 'issue #57' do - it 'should fail with a correct error' do + describe "issue #57" do + it "should fail with a correct error" do + # standard:disable Style/HashSyntax expect { - actual = { :category => 'app.rack.request' } - expected = { :category => 'rack.middleware', :title => 'Anonymous Middleware' } + actual = {:category => "app.rack.request"} + expected = {:category => "rack.middleware", :title => "Anonymous Middleware"} expect(actual).to eq(expected) }.to raise_error(RSpec::Expectations::ExpectationNotMetError) + # standard:enable Style/HashSyntax end end - describe 'issue #60' do - it 'should produce unified output with correct context' do + describe "issue #60" do + it "should produce unified output with correct context" do + # standard:disable Layout/HeredocIndentation old_data = <<-DATA_OLD.strip.split("\n").map(&:chomp) { "name": "x", @@ -93,10 +96,11 @@ describe 'Diff::LCS Issues' do + "description": "lo" } EXPECTED + # standard:enable Layout/HeredocIndentation end end - describe 'issue #65' do + describe "issue #65" do def diff_lines(old_lines, new_lines) file_length_difference = 0 previous_hunk = nil @@ -115,24 +119,25 @@ describe 'Diff::LCS Issues' do output.join end - it 'should not misplace the new chunk' do + it "should not misplace the new chunk" do old_data = [ - 'recipe[a::default]', 'recipe[b::default]', 'recipe[c::default]', - 'recipe[d::default]', 'recipe[e::default]', 'recipe[f::default]', - 'recipe[g::default]', 'recipe[h::default]', 'recipe[i::default]', - 'recipe[j::default]', 'recipe[k::default]', 'recipe[l::default]', - 'recipe[m::default]', 'recipe[n::default]' + "recipe[a::default]", "recipe[b::default]", "recipe[c::default]", + "recipe[d::default]", "recipe[e::default]", "recipe[f::default]", + "recipe[g::default]", "recipe[h::default]", "recipe[i::default]", + "recipe[j::default]", "recipe[k::default]", "recipe[l::default]", + "recipe[m::default]", "recipe[n::default]" ] new_data = [ - 'recipe[a::default]', 'recipe[c::default]', 'recipe[d::default]', - 'recipe[e::default]', 'recipe[f::default]', 'recipe[g::default]', - 'recipe[h::default]', 'recipe[i::default]', 'recipe[j::default]', - 'recipe[k::default]', 'recipe[l::default]', 'recipe[m::default]', - 'recipe[n::default]', 'recipe[o::new]', 'recipe[p::new]', - 'recipe[q::new]', 'recipe[r::new]' + "recipe[a::default]", "recipe[c::default]", "recipe[d::default]", + "recipe[e::default]", "recipe[f::default]", "recipe[g::default]", + "recipe[h::default]", "recipe[i::default]", "recipe[j::default]", + "recipe[k::default]", "recipe[l::default]", "recipe[m::default]", + "recipe[n::default]", "recipe[o::new]", "recipe[p::new]", + "recipe[q::new]", "recipe[r::new]" ] + # standard:disable Layout/HeredocIndentation expect(diff_lines(old_data, new_data)).to eq(<<-EODIFF) @@ -1,5 +1,4 @@ recipe[a::default] @@ -149,6 +154,7 @@ describe 'Diff::LCS Issues' do +recipe[q::new] +recipe[r::new] EODIFF + # standard:enable Layout/HeredocIndentation end end end diff --git a/spec/lcs_spec.rb b/spec/lcs_spec.rb index 94428fd..c17f22f 100644 --- a/spec/lcs_spec.rb +++ b/spec/lcs_spec.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe Diff::LCS::Internals, '.lcs' do +describe Diff::LCS::Internals, ".lcs" do include Diff::LCS::SpecHelper::Matchers - it 'returns a meaningful LCS array with (seq1, seq2)' do + it "returns a meaningful LCS array with (seq1, seq2)" do res = Diff::LCS::Internals.lcs(seq1, seq2) # The result of the LCS (less the +nil+ values) must be as long as the # correct result. @@ -20,37 +20,37 @@ describe Diff::LCS::Internals, '.lcs' do expect(x_seq2).to eq(correct_lcs) end - it 'returns all indexes with (hello, hello)' do + it "returns all indexes with (hello, hello)" do expect(Diff::LCS::Internals.lcs(hello, hello)).to \ eq((0...hello.size).to_a) end - it 'returns all indexes with (hello_ary, hello_ary)' do + it "returns all indexes with (hello_ary, hello_ary)" do expect(Diff::LCS::Internals.lcs(hello_ary, hello_ary)).to \ eq((0...hello_ary.size).to_a) end end -describe Diff::LCS, '.LCS' do +describe Diff::LCS, ".LCS" do include Diff::LCS::SpecHelper::Matchers - it 'returns the correct compacted values from Diff::LCS.LCS' do + it "returns the correct compacted values from Diff::LCS.LCS" do res = Diff::LCS.LCS(seq1, seq2) expect(res).to eq(correct_lcs) expect(res.compact).to eq(res) end - it 'is transitive' do + it "is transitive" do res = Diff::LCS.LCS(seq2, seq1) expect(res).to eq(correct_lcs) expect(res.compact).to eq(res) end - it 'returns %W(h e l l o) with (hello, hello)' do - expect(Diff::LCS.LCS(hello, hello)).to eq(hello.split(//)) + it "returns %W(h e l l o) with (hello, hello)" do + expect(Diff::LCS.LCS(hello, hello)).to eq(hello.chars) end - it 'returns hello_ary with (hello_ary, hello_ary)' do + it "returns hello_ary with (hello_ary, hello_ary)" do expect(Diff::LCS.LCS(hello_ary, hello_ary)).to eq(hello_ary) end end diff --git a/spec/ldiff_spec.rb b/spec/ldiff_spec.rb index a2468f8..cf89ada 100644 --- a/spec/ldiff_spec.rb +++ b/spec/ldiff_spec.rb @@ -1,29 +1,31 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -RSpec.describe 'bin/ldiff' do +RSpec.describe "bin/ldiff" do include CaptureSubprocessIO + # standard:disable Style/HashSyntax fixtures = [ - { :name => 'output.diff', :left => 'aX', :right => 'bXaX' }, - { :name => 'output.diff.chef', :left => 'old-chef', :right => 'new-chef' }, - { :name => 'output.diff.chef2', :left => 'old-chef2', :right => 'new-chef2' } - ].product([nil, '-e', '-f', '-c', '-u']).map { |(fixture, flag)| + {:name => "output.diff", :left => "aX", :right => "bXaX"}, + {:name => "output.diff.chef", :left => "old-chef", :right => "new-chef"}, + {:name => "output.diff.chef2", :left => "old-chef2", :right => "new-chef2"} + ].product([nil, "-e", "-f", "-c", "-u"]).map { |(fixture, flag)| fixture = fixture.dup fixture[:flag] = flag fixture } + # standard:enable Style/HashSyntax def self.test_ldiff(fixture) desc = [ fixture[:flag], "spec/fixtures/#{fixture[:left]}", "spec/fixtures/#{fixture[:right]}", - '#', - '=>', + "#", + "=>", "spec/fixtures/ldiff/#{fixture[:name]}#{fixture[:flag]}" - ].join(' ') + ].join(" ") it desc do expect(run_ldiff(fixture)).to eq(read_fixture(fixture)) @@ -45,7 +47,7 @@ RSpec.describe 'bin/ldiff' do def clean_data(data, flag) data = case flag - when '-c', '-u' + when "-c", "-u" clean_output_timestamp(data) else data @@ -80,7 +82,7 @@ RSpec.describe 'bin/ldiff' do system("ruby -Ilib bin/ldiff #{flag} spec/fixtures/#{left} spec/fixtures/#{right}") end - expect(stderr).to be_empty if RUBY_VERSION >= '1.9' + expect(stderr).to be_empty if RUBY_VERSION >= "1.9" expect(stdout).not_to be_empty clean_data(stdout, flag) end diff --git a/spec/patch_spec.rb b/spec/patch_spec.rb index 11b0981..6b9bf28 100644 --- a/spec/patch_spec.rb +++ b/spec/patch_spec.rb @@ -1,54 +1,54 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Diff::LCS.patch' do +describe "Diff::LCS.patch" do include Diff::LCS::SpecHelper::Matchers - shared_examples 'patch sequences correctly' do - it 'correctly patches left-to-right (patch autodiscovery)' do + shared_examples "patch sequences correctly" do + it "correctly patches left-to-right (patch autodiscovery)" do expect(Diff::LCS.patch(s1, patch_set)).to eq(s2) end - it 'correctly patches left-to-right (explicit patch)' do + it "correctly patches left-to-right (explicit patch)" do expect(Diff::LCS.patch(s1, patch_set, :patch)).to eq(s2) expect(Diff::LCS.patch!(s1, patch_set)).to eq(s2) end - it 'correctly patches right-to-left (unpatch autodiscovery)' do + it "correctly patches right-to-left (unpatch autodiscovery)" do expect(Diff::LCS.patch(s2, patch_set)).to eq(s1) end - it 'correctly patches right-to-left (explicit unpatch)' do + it "correctly patches right-to-left (explicit unpatch)" do expect(Diff::LCS.patch(s2, patch_set, :unpatch)).to eq(s1) expect(Diff::LCS.unpatch!(s2, patch_set)).to eq(s1) end end - describe 'using a Diff::LCS.diff patchset' do - describe 'an empty patchset returns the source' do - it 'works on a string (hello)' do + describe "using a Diff::LCS.diff patchset" do + describe "an empty patchset returns the source" do + it "works on a string (hello)" do diff = Diff::LCS.diff(hello, hello) expect(Diff::LCS.patch(hello, diff)).to eq(hello) end - it 'works on an array %W(h e l l o)' do + it "works on an array %W(h e l l o)" do diff = Diff::LCS.diff(hello_ary, hello_ary) expect(Diff::LCS.patch(hello_ary, diff)).to eq(hello_ary) end end - describe 'with default diff callbacks (DiffCallbacks)' do - describe 'forward (s1 -> s2)' do - it_has_behavior 'patch sequences correctly' do + describe "with default diff callbacks (DiffCallbacks)" do + describe "forward (s1 -> s2)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq1 } let(:s2) { seq2 } let(:patch_set) { Diff::LCS.diff(seq1, seq2) } end end - describe 'reverse (s2 -> s1)' do - it_has_behavior 'patch sequences correctly' do + describe "reverse (s2 -> s1)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq2 } let(:s2) { seq1 } let(:patch_set) { Diff::LCS.diff(seq2, seq1) } @@ -56,9 +56,9 @@ describe 'Diff::LCS.patch' do end end - describe 'with context diff callbacks (ContextDiffCallbacks)' do - describe 'forward (s1 -> s2)' do - it_has_behavior 'patch sequences correctly' do + describe "with context diff callbacks (ContextDiffCallbacks)" do + describe "forward (s1 -> s2)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq1 } let(:s2) { seq2 } let(:patch_set) { @@ -67,8 +67,8 @@ describe 'Diff::LCS.patch' do end end - describe 'reverse (s2 -> s1)' do - it_has_behavior 'patch sequences correctly' do + describe "reverse (s2 -> s1)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq2 } let(:s2) { seq1 } let(:patch_set) { @@ -78,9 +78,9 @@ describe 'Diff::LCS.patch' do end end - describe 'with sdiff callbacks (SDiffCallbacks)' do - describe 'forward (s1 -> s2)' do - it_has_behavior 'patch sequences correctly' do + describe "with sdiff callbacks (SDiffCallbacks)" do + describe "forward (s1 -> s2)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq1 } let(:s2) { seq2 } let(:patch_set) { @@ -89,8 +89,8 @@ describe 'Diff::LCS.patch' do end end - describe 'reverse (s2 -> s1)' do - it_has_behavior 'patch sequences correctly' do + describe "reverse (s2 -> s1)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq2 } let(:s2) { seq1 } let(:patch_set) { @@ -101,20 +101,20 @@ describe 'Diff::LCS.patch' do end end - describe 'using a Diff::LCS.sdiff patchset' do - describe 'an empty patchset returns the source' do - it 'works on a string (hello)' do + describe "using a Diff::LCS.sdiff patchset" do + describe "an empty patchset returns the source" do + it "works on a string (hello)" do expect(Diff::LCS.patch(hello, Diff::LCS.sdiff(hello, hello))).to eq(hello) end - it 'works on an array %W(h e l l o)' do + it "works on an array %W(h e l l o)" do expect(Diff::LCS.patch(hello_ary, Diff::LCS.sdiff(hello_ary, hello_ary))).to eq(hello_ary) end end - describe 'with default diff callbacks (DiffCallbacks)' do - describe 'forward (s1 -> s2)' do - it_has_behavior 'patch sequences correctly' do + describe "with default diff callbacks (DiffCallbacks)" do + describe "forward (s1 -> s2)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq1 } let(:s2) { seq2 } let(:patch_set) { @@ -123,8 +123,8 @@ describe 'Diff::LCS.patch' do end end - describe 'reverse (s2 -> s1)' do - it_has_behavior 'patch sequences correctly' do + describe "reverse (s2 -> s1)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq2 } let(:s2) { seq1 } let(:patch_set) { @@ -134,9 +134,9 @@ describe 'Diff::LCS.patch' do end end - describe 'with context diff callbacks (DiffCallbacks)' do - describe 'forward (s1 -> s2)' do - it_has_behavior 'patch sequences correctly' do + describe "with context diff callbacks (DiffCallbacks)" do + describe "forward (s1 -> s2)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq1 } let(:s2) { seq2 } let(:patch_set) { @@ -145,8 +145,8 @@ describe 'Diff::LCS.patch' do end end - describe 'reverse (s2 -> s1)' do - it_has_behavior 'patch sequences correctly' do + describe "reverse (s2 -> s1)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq2 } let(:s2) { seq1 } let(:patch_set) { @@ -156,17 +156,17 @@ describe 'Diff::LCS.patch' do end end - describe 'with sdiff callbacks (SDiffCallbacks)' do - describe 'forward (s1 -> s2)' do - it_has_behavior 'patch sequences correctly' do + describe "with sdiff callbacks (SDiffCallbacks)" do + describe "forward (s1 -> s2)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq1 } let(:s2) { seq2 } let(:patch_set) { Diff::LCS.sdiff(seq1, seq2) } end end - describe 'reverse (s2 -> s1)' do - it_has_behavior 'patch sequences correctly' do + describe "reverse (s2 -> s1)" do + it_has_behavior "patch sequences correctly" do let(:s1) { seq2 } let(:s2) { seq1 } let(:patch_set) { Diff::LCS.sdiff(seq2, seq1) } @@ -179,43 +179,43 @@ describe 'Diff::LCS.patch' do # to s2 patches"), this cannot use the "patch sequences correctly" shared # set. Once the bug in autodiscovery is fixed, this can be converted as # above. - describe 'fix bug 891: patchsets do not contain the last equal part' do + describe "fix bug 891: patchsets do not contain the last equal part" do before :each do - @s1 = %w(a b c d e f g h i j k) # rubocop:disable Layout/SpaceInsideArrayPercentLiteral - @s2 = %w(a b c d D e f g h i j k) + @s1 = %w[a b c d e f g h i j k] # rubocop:disable Layout/SpaceInsideArrayPercentLiteral + @s2 = %w[a b c d D e f g h i j k] end - describe 'using Diff::LCS.diff with default diff callbacks' do + describe "using Diff::LCS.diff with default diff callbacks" do before :each do @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2) @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1) end - it 'autodiscovers s1 to s2 patches' do + it "autodiscovers s1 to s2 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 patches' do + it "autodiscovers s2 to s1 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 the left-to-right patches' do + it "autodiscovers s2 to s1 the left-to-right patches" do expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1) expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1) end - it 'correctly patches left-to-right (explicit patch)' do + it "correctly patches left-to-right (explicit patch)" do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2) expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1) expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2) expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1) end - it 'correctly patches right-to-left (explicit unpatch)' do + it "correctly patches right-to-left (explicit unpatch)" do expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1) expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2) expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1) @@ -223,37 +223,37 @@ describe 'Diff::LCS.patch' do end end - describe 'using Diff::LCS.diff with context diff callbacks' do + describe "using Diff::LCS.diff with context diff callbacks" do before :each do @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2, Diff::LCS::ContextDiffCallbacks) @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1, Diff::LCS::ContextDiffCallbacks) end - it 'autodiscovers s1 to s2 patches' do + it "autodiscovers s1 to s2 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 patches' do + it "autodiscovers s2 to s1 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 the left-to-right patches' do + it "autodiscovers s2 to s1 the left-to-right patches" do expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1) expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1) end - it 'correctly patches left-to-right (explicit patch)' do + it "correctly patches left-to-right (explicit patch)" do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2) expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1) expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2) expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1) end - it 'correctly patches right-to-left (explicit unpatch)' do + it "correctly patches right-to-left (explicit unpatch)" do expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1) expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2) expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1) @@ -261,37 +261,37 @@ describe 'Diff::LCS.patch' do end end - describe 'using Diff::LCS.diff with sdiff callbacks' do + describe "using Diff::LCS.diff with sdiff callbacks" do before(:each) do @patch_set_s1_s2 = Diff::LCS.diff(@s1, @s2, Diff::LCS::SDiffCallbacks) @patch_set_s2_s1 = Diff::LCS.diff(@s2, @s1, Diff::LCS::SDiffCallbacks) end - it 'autodiscovers s1 to s2 patches' do + it "autodiscovers s1 to s2 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 patches' do + it "autodiscovers s2 to s1 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 the left-to-right patches' do + it "autodiscovers s2 to s1 the left-to-right patches" do expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1) expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1) end - it 'correctly patches left-to-right (explicit patch)' do + it "correctly patches left-to-right (explicit patch)" do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2) expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1) expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2) expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1) end - it 'correctly patches right-to-left (explicit unpatch)' do + it "correctly patches right-to-left (explicit unpatch)" do expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1) expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2) expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1) @@ -299,37 +299,37 @@ describe 'Diff::LCS.patch' do end end - describe 'using Diff::LCS.sdiff with default sdiff callbacks' do + describe "using Diff::LCS.sdiff with default sdiff callbacks" do before(:each) do @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2) @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1) end - it 'autodiscovers s1 to s2 patches' do + it "autodiscovers s1 to s2 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 patches' do + it "autodiscovers s2 to s1 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 the left-to-right patches' do + it "autodiscovers s2 to s1 the left-to-right patches" do expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1) expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1) end - it 'correctly patches left-to-right (explicit patch)' do + it "correctly patches left-to-right (explicit patch)" do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2) expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1) expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2) expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1) end - it 'correctly patches right-to-left (explicit unpatch)' do + it "correctly patches right-to-left (explicit unpatch)" do expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1) expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2) expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1) @@ -337,37 +337,37 @@ describe 'Diff::LCS.patch' do end end - describe 'using Diff::LCS.sdiff with context diff callbacks' do + describe "using Diff::LCS.sdiff with context diff callbacks" do before(:each) do @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2, Diff::LCS::ContextDiffCallbacks) @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::ContextDiffCallbacks) end - it 'autodiscovers s1 to s2 patches' do + it "autodiscovers s1 to s2 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 patches' do + it "autodiscovers s2 to s1 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 the left-to-right patches' do + it "autodiscovers s2 to s1 the left-to-right patches" do expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1) expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1) end - it 'correctly patches left-to-right (explicit patch)' do + it "correctly patches left-to-right (explicit patch)" do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2) expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1) expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2) expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1) end - it 'correctly patches right-to-left (explicit unpatch)' do + it "correctly patches right-to-left (explicit unpatch)" do expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1) expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2) expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1) @@ -375,37 +375,37 @@ describe 'Diff::LCS.patch' do end end - describe 'using Diff::LCS.sdiff with default diff callbacks' do + describe "using Diff::LCS.sdiff with default diff callbacks" do before(:each) do @patch_set_s1_s2 = Diff::LCS.sdiff(@s1, @s2, Diff::LCS::DiffCallbacks) @patch_set_s2_s1 = Diff::LCS.sdiff(@s2, @s1, Diff::LCS::DiffCallbacks) end - it 'autodiscovers s1 to s2 patches' do + it "autodiscovers s1 to s2 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 patches' do + it "autodiscovers s2 to s1 patches" do expect do expect(Diff::LCS.patch(@s1, @patch_set_s2_s1)).to eq(@s2) end.to_not raise_error end - it 'autodiscovers s2 to s1 the left-to-right patches' do + it "autodiscovers s2 to s1 the left-to-right patches" do expect(Diff::LCS.patch(@s2, @patch_set_s2_s1)).to eq(@s1) expect(Diff::LCS.patch(@s2, @patch_set_s1_s2)).to eq(@s1) end - it 'correctly patches left-to-right (explicit patch)' do + it "correctly patches left-to-right (explicit patch)" do expect(Diff::LCS.patch(@s1, @patch_set_s1_s2, :patch)).to eq(@s2) expect(Diff::LCS.patch(@s2, @patch_set_s2_s1, :patch)).to eq(@s1) expect(Diff::LCS.patch!(@s1, @patch_set_s1_s2)).to eq(@s2) expect(Diff::LCS.patch!(@s2, @patch_set_s2_s1)).to eq(@s1) end - it 'correctly patches right-to-left (explicit unpatch)' do + it "correctly patches right-to-left (explicit unpatch)" do expect(Diff::LCS.patch(@s2, @patch_set_s1_s2, :unpatch)).to eq(@s1) expect(Diff::LCS.patch(@s1, @patch_set_s2_s1, :unpatch)).to eq(@s2) expect(Diff::LCS.unpatch!(@s2, @patch_set_s1_s2)).to eq(@s1) diff --git a/spec/sdiff_spec.rb b/spec/sdiff_spec.rb index 06d39d6..aded301 100644 --- a/spec/sdiff_spec.rb +++ b/spec/sdiff_spec.rb @@ -1,214 +1,216 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Diff::LCS.sdiff' do +describe "Diff::LCS.sdiff" do include Diff::LCS::SpecHelper::Matchers - shared_examples 'compare sequences correctly' do - it 'compares s1 -> s2 correctly' do + shared_examples "compare sequences correctly" do + it "compares s1 -> s2 correctly" do expect(Diff::LCS.sdiff(s1, s2)).to eq(context_diff(result)) end - it 'compares s2 -> s1 correctly' do + it "compares s2 -> s1 correctly" do expect(Diff::LCS.sdiff(s2, s1)).to eq(context_diff(reverse_sdiff(result))) end end - describe 'using seq1 & seq2' do + describe "using seq1 & seq2" do let(:s1) { seq1 } let(:s2) { seq2 } let(:result) { correct_forward_sdiff } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(abc def yyy xxx ghi jkl) & %w(abc dxf xxx ghi jkl)' do - let(:s1) { %w(abc def yyy xxx ghi jkl) } - let(:s2) { %w(abc dxf xxx ghi jkl) } + describe "using %w(abc def yyy xxx ghi jkl) & %w(abc dxf xxx ghi jkl)" do + let(:s1) { %w[abc def yyy xxx ghi jkl] } + let(:s2) { %w[abc dxf xxx ghi jkl] } let(:result) { + # standard:disable Layout/ExtraSpacing [ - ['=', [0, 'abc'], [0, 'abc']], - ['!', [1, 'def'], [1, 'dxf']], - ['-', [2, 'yyy'], [2, nil]], - ['=', [3, 'xxx'], [2, 'xxx']], - ['=', [4, 'ghi'], [3, 'ghi']], - ['=', [5, 'jkl'], [4, 'jkl']] + ["=", [0, "abc"], [0, "abc"]], + ["!", [1, "def"], [1, "dxf"]], + ["-", [2, "yyy"], [2, nil]], + ["=", [3, "xxx"], [2, "xxx"]], + ["=", [4, "ghi"], [3, "ghi"]], + ["=", [5, "jkl"], [4, "jkl"]] ] + # standard:enable Layout/ExtraSpacing } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(a b c d e) & %w(a e)' do - let(:s1) { %w(a b c d e) } - let(:s2) { %w(a e) } + describe "using %w(a b c d e) & %w(a e)" do + let(:s1) { %w[a b c d e] } + let(:s2) { %w[a e] } let(:result) { [ - ['=', [0, 'a'], [0, 'a']], - ['-', [1, 'b'], [1, nil]], - ['-', [2, 'c'], [1, nil]], - ['-', [3, 'd'], [1, nil]], - ['=', [4, 'e'], [1, 'e']] + ["=", [0, "a"], [0, "a"]], + ["-", [1, "b"], [1, nil]], + ["-", [2, "c"], [1, nil]], + ["-", [3, "d"], [1, nil]], + ["=", [4, "e"], [1, "e"]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(a e) & %w(a b c d e)' do - let(:s1) { %w(a e) } - let(:s2) { %w(a b c d e) } + describe "using %w(a e) & %w(a b c d e)" do + let(:s1) { %w[a e] } + let(:s2) { %w[a b c d e] } let(:result) { [ - ['=', [0, 'a'], [0, 'a']], - ['+', [1, nil], [1, 'b']], - ['+', [1, nil], [2, 'c']], - ['+', [1, nil], [3, 'd']], - ['=', [1, 'e'], [4, 'e']] + ["=", [0, "a"], [0, "a"]], + ["+", [1, nil], [1, "b"]], + ["+", [1, nil], [2, "c"]], + ["+", [1, nil], [3, "d"]], + ["=", [1, "e"], [4, "e"]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(v x a e) & %w(w y a b c d e)' do - let(:s1) { %w(v x a e) } - let(:s2) { %w(w y a b c d e) } + describe "using %w(v x a e) & %w(w y a b c d e)" do + let(:s1) { %w[v x a e] } + let(:s2) { %w[w y a b c d e] } let(:result) { [ - ['!', [0, 'v'], [0, 'w']], - ['!', [1, 'x'], [1, 'y']], - ['=', [2, 'a'], [2, 'a']], - ['+', [3, nil], [3, 'b']], - ['+', [3, nil], [4, 'c']], - ['+', [3, nil], [5, 'd']], - ['=', [3, 'e'], [6, 'e']] + ["!", [0, "v"], [0, "w"]], + ["!", [1, "x"], [1, "y"]], + ["=", [2, "a"], [2, "a"]], + ["+", [3, nil], [3, "b"]], + ["+", [3, nil], [4, "c"]], + ["+", [3, nil], [5, "d"]], + ["=", [3, "e"], [6, "e"]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(x a e) & %w(a b c d e)' do - let(:s1) { %w(x a e) } - let(:s2) { %w(a b c d e) } + describe "using %w(x a e) & %w(a b c d e)" do + let(:s1) { %w[x a e] } + let(:s2) { %w[a b c d e] } let(:result) { [ - ['-', [0, 'x'], [0, nil]], - ['=', [1, 'a'], [0, 'a']], - ['+', [2, nil], [1, 'b']], - ['+', [2, nil], [2, 'c']], - ['+', [2, nil], [3, 'd']], - ['=', [2, 'e'], [4, 'e']] + ["-", [0, "x"], [0, nil]], + ["=", [1, "a"], [0, "a"]], + ["+", [2, nil], [1, "b"]], + ["+", [2, nil], [2, "c"]], + ["+", [2, nil], [3, "d"]], + ["=", [2, "e"], [4, "e"]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(a e) & %w(x a b c d e)' do - let(:s1) { %w(a e) } - let(:s2) { %w(x a b c d e) } + describe "using %w(a e) & %w(x a b c d e)" do + let(:s1) { %w[a e] } + let(:s2) { %w[x a b c d e] } let(:result) { [ - ['+', [0, nil], [0, 'x']], - ['=', [0, 'a'], [1, 'a']], - ['+', [1, nil], [2, 'b']], - ['+', [1, nil], [3, 'c']], - ['+', [1, nil], [4, 'd']], - ['=', [1, 'e'], [5, 'e']] + ["+", [0, nil], [0, "x"]], + ["=", [0, "a"], [1, "a"]], + ["+", [1, nil], [2, "b"]], + ["+", [1, nil], [3, "c"]], + ["+", [1, nil], [4, "d"]], + ["=", [1, "e"], [5, "e"]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(a e v) & %w(x a b c d e w x)' do - let(:s1) { %w(a e v) } - let(:s2) { %w(x a b c d e w x) } + describe "using %w(a e v) & %w(x a b c d e w x)" do + let(:s1) { %w[a e v] } + let(:s2) { %w[x a b c d e w x] } let(:result) { [ - ['+', [0, nil], [0, 'x']], - ['=', [0, 'a'], [1, 'a']], - ['+', [1, nil], [2, 'b']], - ['+', [1, nil], [3, 'c']], - ['+', [1, nil], [4, 'd']], - ['=', [1, 'e'], [5, 'e']], - ['!', [2, 'v'], [6, 'w']], - ['+', [3, nil], [7, 'x']] + ["+", [0, nil], [0, "x"]], + ["=", [0, "a"], [1, "a"]], + ["+", [1, nil], [2, "b"]], + ["+", [1, nil], [3, "c"]], + ["+", [1, nil], [4, "d"]], + ["=", [1, "e"], [5, "e"]], + ["!", [2, "v"], [6, "w"]], + ["+", [3, nil], [7, "x"]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w() & %w(a b c)' do - let(:s1) { %w() } - let(:s2) { %w(a b c) } + describe "using %w() & %w(a b c)" do + let(:s1) { %w[] } + let(:s2) { %w[a b c] } let(:result) { [ - ['+', [0, nil], [0, 'a']], - ['+', [0, nil], [1, 'b']], - ['+', [0, nil], [2, 'c']] + ["+", [0, nil], [0, "a"]], + ["+", [0, nil], [1, "b"]], + ["+", [0, nil], [2, "c"]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(a b c) & %w(1)' do - let(:s1) { %w(a b c) } - let(:s2) { %w(1) } + describe "using %w(a b c) & %w(1)" do + let(:s1) { %w[a b c] } + let(:s2) { %w[1] } let(:result) { [ - ['!', [0, 'a'], [0, '1']], - ['-', [1, 'b'], [1, nil]], - ['-', [2, 'c'], [1, nil]] + ["!", [0, "a"], [0, "1"]], + ["-", [1, "b"], [1, nil]], + ["-", [2, "c"], [1, nil]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(a b c) & %w(c)' do - let(:s1) { %w(a b c) } - let(:s2) { %w(c) } + describe "using %w(a b c) & %w(c)" do + let(:s1) { %w[a b c] } + let(:s2) { %w[c] } let(:result) { [ - ['-', [0, 'a'], [0, nil]], - ['-', [1, 'b'], [0, nil]], - ['=', [2, 'c'], [0, 'c']] + ["-", [0, "a"], [0, nil]], + ["-", [1, "b"], [0, nil]], + ["=", [2, "c"], [0, "c"]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using %w(abcd efgh ijkl mnop) & []' do - let(:s1) { %w(abcd efgh ijkl mnop) } + describe "using %w(abcd efgh ijkl mnop) & []" do + let(:s1) { %w[abcd efgh ijkl mnop] } let(:s2) { [] } let(:result) { [ - ['-', [0, 'abcd'], [0, nil]], - ['-', [1, 'efgh'], [0, nil]], - ['-', [2, 'ijkl'], [0, nil]], - ['-', [3, 'mnop'], [0, nil]] + ["-", [0, "abcd"], [0, nil]], + ["-", [1, "efgh"], [0, nil]], + ["-", [2, "ijkl"], [0, nil]], + ["-", [3, "mnop"], [0, nil]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end - describe 'using [[1,2]] & []' do + describe "using [[1,2]] & []" do let(:s1) { [[1, 2]] } let(:s2) { [] } let(:result) { [ - ['-', [0, [1, 2]], [0, nil]] + ["-", [0, [1, 2]], [0, nil]] ] } - it_has_behavior 'compare sequences correctly' + it_has_behavior "compare sequences correctly" end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 41e1f8e..6993912 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,12 +1,12 @@ # frozen_string_literal: true -require 'rubygems' -require 'pathname' +require "rubygems" +require "pathname" -require 'psych' if RUBY_VERSION >= '1.9' +require "psych" if RUBY_VERSION >= "1.9" -if ENV['COVERAGE'] - require 'simplecov' +if ENV["COVERAGE"] + require "simplecov" def require_do(resource) require resource @@ -17,13 +17,13 @@ if ENV['COVERAGE'] formatters = [SimpleCov::Formatter::HTMLFormatter] - require_do('simplecov-rcov') { + require_do("simplecov-rcov") { formatters << SimpleCov::Formatter::RcovFormatter } - require_do('simplecov-vim/formatter') { + require_do("simplecov-vim/formatter") { formatters << SimpleCov::Formatter::VimFormatter } - require_do('simplecov-sublime-ruby-coverage') { + require_do("simplecov-sublime-ruby-coverage") { formatters << SimpleCov::Formatter::SublimeRubyCoverageFormatter } @@ -32,11 +32,11 @@ if ENV['COVERAGE'] end end -file = Pathname.new(__FILE__).expand_path -path = file.parent +file = Pathname.new(__FILE__).expand_path +path = file.parent parent = path.parent -$:.unshift parent.join('lib') +$:.unshift parent.join("lib") module CaptureSubprocessIO def _synchronize @@ -48,9 +48,9 @@ module CaptureSubprocessIO end def _capture_subprocess_io - require 'tempfile' + require "tempfile" - captured_stdout, captured_stderr = Tempfile.new('out'), Tempfile.new('err') + captured_stdout, captured_stderr = Tempfile.new("out"), Tempfile.new("err") orig_stdout, orig_stderr = $stdout.dup, $stderr.dup $stdout.reopen captured_stdout @@ -71,62 +71,63 @@ module CaptureSubprocessIO private :_capture_subprocess_io end -require 'diff-lcs' +require "diff-lcs" module Diff::LCS::SpecHelper def hello - 'hello' + "hello" end def hello_ary - %w(h e l l o) + %w[h e l l o] end def seq1 - %w(a b c e h j l m n p) + %w[a b c e h j l m n p] end def skipped_seq1 - %w(a h n p) + %w[a h n p] end def seq2 - %w(b c d e f j k l m r s t) + %w[b c d e f j k l m r s t] end def skipped_seq2 - %w(d f k r s t) + %w[d f k r s t] end def word_sequence - %w(abcd efgh ijkl mnopqrstuvwxyz) + %w[abcd efgh ijkl mnopqrstuvwxyz] end def correct_lcs - %w(b c e j l m) + %w[b c e j l m] end + # standard:disable Layout/ExtraSpacing def correct_forward_diff [ [ - ['-', 0, 'a'] + ["-", 0, "a"] ], [ - ['+', 2, 'd'] + ["+", 2, "d"] ], [ - ['-', 4, 'h'], - ['+', 4, 'f'] + ["-", 4, "h"], + ["+", 4, "f"] ], [ - ['+', 6, 'k'] + ["+", 6, "k"] ], [ - ['-', 8, 'n'], - ['+', 9, 'r'], - ['-', 9, 'p'], - ['+', 10, 's'], - ['+', 11, 't'] + ["-", 8, "n"], + ["+", 9, "r"], + ["-", 9, "p"], + ["+", 10, "s"], + ["+", 11, "t"] ] ] end @@ -134,52 +135,53 @@ module Diff::LCS::SpecHelper def correct_backward_diff [ [ - ['+', 0, 'a'] + ["+", 0, "a"] ], [ - ['-', 2, 'd'] + ["-", 2, "d"] ], [ - ['-', 4, 'f'], - ['+', 4, 'h'] + ["-", 4, "f"], + ["+", 4, "h"] ], [ - ['-', 6, 'k'] + ["-", 6, "k"] ], [ - ['-', 9, 'r'], - ['+', 8, 'n'], - ['-', 10, 's'], - ['+', 9, 'p'], - ['-', 11, 't'] + ["-", 9, "r"], + ["+", 8, "n"], + ["-", 10, "s"], + ["+", 9, "p"], + ["-", 11, "t"] ] ] end def correct_forward_sdiff [ - ['-', [0, 'a'], [0, nil]], - ['=', [1, 'b'], [0, 'b']], - ['=', [2, 'c'], [1, 'c']], - ['+', [3, nil], [2, 'd']], - ['=', [3, 'e'], [3, 'e']], - ['!', [4, 'h'], [4, 'f']], - ['=', [5, 'j'], [5, 'j']], - ['+', [6, nil], [6, 'k']], - ['=', [6, 'l'], [7, 'l']], - ['=', [7, 'm'], [8, 'm']], - ['!', [8, 'n'], [9, 'r']], - ['!', [9, 'p'], [10, 's']], - ['+', [10, nil], [11, 't']] + ["-", [0, "a"], [0, nil]], + ["=", [1, "b"], [0, "b"]], + ["=", [2, "c"], [1, "c"]], + ["+", [3, nil], [2, "d"]], + ["=", [3, "e"], [3, "e"]], + ["!", [4, "h"], [4, "f"]], + ["=", [5, "j"], [5, "j"]], + ["+", [6, nil], [6, "k"]], + ["=", [6, "l"], [7, "l"]], + ["=", [7, "m"], [8, "m"]], + ["!", [8, "n"], [9, "r"]], + ["!", [9, "p"], [10, "s"]], + ["+", [10, nil], [11, "t"]] ] end + # standard:enable Layout/ExtraSpacing def reverse_sdiff(forward_sdiff) forward_sdiff.map { |line| line[1], line[2] = line[2], line[1] case line[0] - when '-' then line[0] = '+' - when '+' then line[0] = '-' + when "-" then line[0] = "+" + when "+" then line[0] = "-" end line } @@ -195,8 +197,8 @@ module Diff::LCS::SpecHelper def format_diffs(diffs) diffs.map { |e| - if e.kind_of?(Array) - e.map { |f| f.to_a.join }.join(', ') + if e.is_a?(Array) + e.map { |f| f.to_a.join }.join(", ") else e.to_a.join end @@ -224,10 +226,10 @@ module Diff::LCS::SpecHelper change_result.each do |line| line = [line[0], line[2], line[1]] case line[0] - when '<' - line[0] = '>' - when '>' - line[0] = '<' + when "<" + line[0] = ">" + when ">" + line[0] = "<" end new_result << line end @@ -238,9 +240,9 @@ module Diff::LCS::SpecHelper new_result = [] change_result.each do |line| case line[0] - when '!' - new_result << ['<', line[1], line[2]] - new_result << ['>', line[1] + 1, line[2]] + when "!" + new_result << ["<", line[1], line[2]] + new_result << [">", line[1] + 1, line[2]] else new_result << line end @@ -317,19 +319,19 @@ module Diff::LCS::SpecHelper end def match(event) - @result << ['=', event.old_position, event.new_position] + @result << ["=", event.old_position, event.new_position] end def discard_a(event) - @result << ['<', event.old_position, event.new_position] + @result << ["<", event.old_position, event.new_position] end def discard_b(event) - @result << ['>', event.old_position, event.new_position] + @result << [">", event.old_position, event.new_position] end def change(event) - @result << ['!', event.old_position, event.new_position] + @result << ["!", event.old_position, event.new_position] end end cb.reset @@ -355,9 +357,7 @@ module Diff::LCS::SpecHelper matcher :correctly_map_sequence do |s1| match do |actual| - actual.each_with_index { |ee, ii| - expect(ee).to be_nil_or_match_values(ii, s1, @s2) - } + actual.each_index { |ii| expect(actual[ii]).to be_nil_or_match_values(ii, s1, @s2) } end chain :to_other_sequence do |s2| @@ -369,6 +369,8 @@ end RSpec.configure do |conf| conf.include Diff::LCS::SpecHelper - conf.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:' + conf.alias_it_should_behave_like_to :it_has_behavior, "has behavior:" + # standard:disable Style/HashSyntax conf.filter_run_excluding :broken => true + # standard:enable Style/HashSyntax end diff --git a/spec/traverse_balanced_spec.rb b/spec/traverse_balanced_spec.rb index 9ee68ea..3a3f677 100644 --- a/spec/traverse_balanced_spec.rb +++ b/spec/traverse_balanced_spec.rb @@ -1,310 +1,312 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Diff::LCS.traverse_balanced' do +describe "Diff::LCS.traverse_balanced" do include Diff::LCS::SpecHelper::Matchers - shared_examples 'with a #change callback' do |s1, s2, result| - it 'traverses s1 -> s2 correctly' do + shared_examples "with a #change callback" do |s1, s2, result| + it "traverses s1 -> s2 correctly" do traversal = balanced_traversal(s1, s2, :balanced_callback) expect(traversal.result).to eq(result) end - it 'traverses s2 -> s1 correctly' do + it "traverses s2 -> s1 correctly" do traversal = balanced_traversal(s2, s1, :balanced_callback) expect(traversal.result).to eq(balanced_reverse(result)) end end - shared_examples 'without a #change callback' do |s1, s2, result| - it 'traverses s1 -> s2 correctly' do + shared_examples "without a #change callback" do |s1, s2, result| + it "traverses s1 -> s2 correctly" do traversal = balanced_traversal(s1, s2, :balanced_callback_no_change) expect(traversal.result).to eq(map_to_no_change(result)) end - it 'traverses s2 -> s1 correctly' do + it "traverses s2 -> s1 correctly" do traversal = balanced_traversal(s2, s1, :balanced_callback_no_change) expect(traversal.result).to eq(map_to_no_change(balanced_reverse(result))) end end describe "identical string sequences ('abc')" do - s1 = s2 = 'abc' + s1 = s2 = "abc" result = [ - ['=', 0, 0], - ['=', 1, 1], - ['=', 2, 2] + ["=", 0, 0], + ["=", 1, 1], + ["=", 2, 2] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'identical array sequences %w(a b c)' do - s1 = s2 = %w(a b c) + describe "identical array sequences %w(a b c)" do + s1 = s2 = %w[a b c] result = [ - ['=', 0, 0], - ['=', 1, 1], - ['=', 2, 2] + ["=", 0, 0], + ["=", 1, 1], + ["=", 2, 2] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'sequences %w(a b c) & %w(a x c)' do - s1 = %w(a b c) - s2 = %w(a x c) + describe "sequences %w(a b c) & %w(a x c)" do + s1 = %w[a b c] + s2 = %w[a x c] result = [ - ['=', 0, 0], - ['!', 1, 1], - ['=', 2, 2] + ["=", 0, 0], + ["!", 1, 1], + ["=", 2, 2] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'sequences %w(a x y c) & %w(a v w c)' do - s1 = %w(a x y c) - s2 = %w(a v w c) + describe "sequences %w(a x y c) & %w(a v w c)" do + s1 = %w[a x y c] + s2 = %w[a v w c] result = [ - ['=', 0, 0], - ['!', 1, 1], - ['!', 2, 2], - ['=', 3, 3] + ["=", 0, 0], + ["!", 1, 1], + ["!", 2, 2], + ["=", 3, 3] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'sequences %w(x y c) & %w(v w c)' do - s1 = %w(x y c) - s2 = %w(v w c) + describe "sequences %w(x y c) & %w(v w c)" do + s1 = %w[x y c] + s2 = %w[v w c] result = [ - ['!', 0, 0], - ['!', 1, 1], - ['=', 2, 2] + ["!", 0, 0], + ["!", 1, 1], + ["=", 2, 2] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'sequences %w(a x y z) & %w(b v w)' do - s1 = %w(a x y z) - s2 = %w(b v w) + describe "sequences %w(a x y z) & %w(b v w)" do + s1 = %w[a x y z] + s2 = %w[b v w] result = [ - ['!', 0, 0], - ['!', 1, 1], - ['!', 2, 2], - ['<', 3, 3] + ["!", 0, 0], + ["!", 1, 1], + ["!", 2, 2], + ["<", 3, 3] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'sequences %w(a z) & %w(a)' do - s1 = %w(a z) - s2 = %w(a) + describe "sequences %w(a z) & %w(a)" do + s1 = %w[a z] + s2 = %w[a] result = [ - ['=', 0, 0], - ['<', 1, 1] + ["=", 0, 0], + ["<", 1, 1] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'sequences %w(z a) & %w(a)' do - s1 = %w(z a) - s2 = %w(a) + describe "sequences %w(z a) & %w(a)" do + s1 = %w[z a] + s2 = %w[a] result = [ - ['<', 0, 0], - ['=', 1, 0] + ["<", 0, 0], + ["=", 1, 0] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'sequences %w(a b c) & %w(x y z)' do - s1 = %w(a b c) - s2 = %w(x y z) + describe "sequences %w(a b c) & %w(x y z)" do + s1 = %w[a b c] + s2 = %w[x y z] result = [ - ['!', 0, 0], - ['!', 1, 1], - ['!', 2, 2] + ["!", 0, 0], + ["!", 1, 1], + ["!", 2, 2] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'sequences %w(abcd efgh ijkl mnoopqrstuvwxyz) & []' do - s1 = %w(abcd efgh ijkl mnopqrstuvwxyz) + describe "sequences %w(abcd efgh ijkl mnoopqrstuvwxyz) & []" do + s1 = %w[abcd efgh ijkl mnopqrstuvwxyz] s2 = [] result = [ - ['<', 0, 0], - ['<', 1, 0], - ['<', 2, 0], - ['<', 3, 0] + ["<", 0, 0], + ["<", 1, 0], + ["<", 2, 0], + ["<", 3, 0] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'strings %q(a b c) & %q(a x c)' do - s1 = 'a b c' - s2 = 'a x c' + describe "strings %q(a b c) & %q(a x c)" do + s1 = "a b c" + s2 = "a x c" result = [ - ['=', 0, 0], - ['=', 1, 1], - ['!', 2, 2], - ['=', 3, 3], - ['=', 4, 4] + ["=", 0, 0], + ["=", 1, 1], + ["!", 2, 2], + ["=", 3, 3], + ["=", 4, 4] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'strings %q(a x y c) & %q(a v w c)' do - s1 = 'a x y c' - s2 = 'a v w c' + describe "strings %q(a x y c) & %q(a v w c)" do + s1 = "a x y c" + s2 = "a v w c" result = [ - ['=', 0, 0], - ['=', 1, 1], - ['!', 2, 2], - ['=', 3, 3], - ['!', 4, 4], - ['=', 5, 5], - ['=', 6, 6] + ["=", 0, 0], + ["=", 1, 1], + ["!", 2, 2], + ["=", 3, 3], + ["!", 4, 4], + ["=", 5, 5], + ["=", 6, 6] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'strings %q(x y c) & %q(v w c)' do - s1 = 'x y c' - s2 = 'v w c' + describe "strings %q(x y c) & %q(v w c)" do + s1 = "x y c" + s2 = "v w c" result = [ - ['!', 0, 0], - ['=', 1, 1], - ['!', 2, 2], - ['=', 3, 3], - ['=', 4, 4] + ["!", 0, 0], + ["=", 1, 1], + ["!", 2, 2], + ["=", 3, 3], + ["=", 4, 4] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'strings %q(a x y z) & %q(b v w)' do - s1 = 'a x y z' - s2 = 'b v w' + describe "strings %q(a x y z) & %q(b v w)" do + s1 = "a x y z" + s2 = "b v w" result = [ - ['!', 0, 0], - ['=', 1, 1], - ['!', 2, 2], - ['=', 3, 3], - ['!', 4, 4], - ['<', 5, 5], - ['<', 6, 5] + ["!", 0, 0], + ["=", 1, 1], + ["!", 2, 2], + ["=", 3, 3], + ["!", 4, 4], + ["<", 5, 5], + ["<", 6, 5] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'strings %q(a z) & %q(a)' do - s1 = 'a z' - s2 = 'a' + describe "strings %q(a z) & %q(a)" do + s1 = "a z" + s2 = "a" result = [ - ['=', 0, 0], - ['<', 1, 1], - ['<', 2, 1] + ["=", 0, 0], + ["<", 1, 1], + ["<", 2, 1] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'strings %q(z a) & %q(a)' do - s1 = 'z a' - s2 = 'a' + describe "strings %q(z a) & %q(a)" do + s1 = "z a" + s2 = "a" result = [ - ['<', 0, 0], - ['<', 1, 0], - ['=', 2, 0] + ["<", 0, 0], + ["<", 1, 0], + ["=", 2, 0] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'strings %q(a b c) & %q(x y z)' do - s1 = 'a b c' - s2 = 'x y z' + describe "strings %q(a b c) & %q(x y z)" do + s1 = "a b c" + s2 = "x y z" result = [ - ['!', 0, 0], - ['=', 1, 1], - ['!', 2, 2], - ['=', 3, 3], - ['!', 4, 4] + ["!", 0, 0], + ["=", 1, 1], + ["!", 2, 2], + ["=", 3, 3], + ["!", 4, 4] ] - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end - describe 'strings %q(abcd efgh ijkl mnopqrstuvwxyz) & %q()' do - s1 = 'abcd efgh ijkl mnopqrstuvwxyz' - s2 = '' + describe "strings %q(abcd efgh ijkl mnopqrstuvwxyz) & %q()" do + s1 = "abcd efgh ijkl mnopqrstuvwxyz" + s2 = "" + # standard:disable Layout/ExtraSpacing result = [ - ['<', 0, 0], - ['<', 1, 0], - ['<', 2, 0], - ['<', 3, 0], - ['<', 4, 0], - ['<', 5, 0], - ['<', 6, 0], - ['<', 7, 0], - ['<', 8, 0], - ['<', 9, 0], - ['<', 10, 0], - ['<', 11, 0], - ['<', 12, 0], - ['<', 13, 0], - ['<', 14, 0], - ['<', 15, 0], - ['<', 16, 0], - ['<', 17, 0], - ['<', 18, 0], - ['<', 19, 0], - ['<', 20, 0], - ['<', 21, 0], - ['<', 22, 0], - ['<', 23, 0], - ['<', 24, 0], - ['<', 25, 0], - ['<', 26, 0], - ['<', 27, 0], - ['<', 28, 0] + ["<", 0, 0], + ["<", 1, 0], + ["<", 2, 0], + ["<", 3, 0], + ["<", 4, 0], + ["<", 5, 0], + ["<", 6, 0], + ["<", 7, 0], + ["<", 8, 0], + ["<", 9, 0], + ["<", 10, 0], + ["<", 11, 0], + ["<", 12, 0], + ["<", 13, 0], + ["<", 14, 0], + ["<", 15, 0], + ["<", 16, 0], + ["<", 17, 0], + ["<", 18, 0], + ["<", 19, 0], + ["<", 20, 0], + ["<", 21, 0], + ["<", 22, 0], + ["<", 23, 0], + ["<", 24, 0], + ["<", 25, 0], + ["<", 26, 0], + ["<", 27, 0], + ["<", 28, 0] ] + # standard:enable Layout/ExtraSpacing - it_has_behavior 'with a #change callback', s1, s2, result - it_has_behavior 'without a #change callback', s1, s2, result + it_has_behavior "with a #change callback", s1, s2, result + it_has_behavior "without a #change callback", s1, s2, result end end diff --git a/spec/traverse_sequences_spec.rb b/spec/traverse_sequences_spec.rb index b185e1d..8e9928f 100644 --- a/spec/traverse_sequences_spec.rb +++ b/spec/traverse_sequences_spec.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'spec_helper' +require "spec_helper" -describe 'Diff::LCS.traverse_sequences' do - describe 'callback with no finishers' do - describe 'over (seq1, seq2)' do +describe "Diff::LCS.traverse_sequences" do + describe "callback with no finishers" do + describe "over (seq1, seq2)" do before(:each) do @callback_s1_s2 = simple_callback_no_finishers Diff::LCS.traverse_sequences(seq1, seq2, @callback_s1_s2) @@ -13,27 +13,27 @@ describe 'Diff::LCS.traverse_sequences' do Diff::LCS.traverse_sequences(seq2, seq1, @callback_s2_s1) end - it 'has the correct LCS result on left-matches' do + it "has the correct LCS result on left-matches" do expect(@callback_s1_s2.matched_a).to eq(correct_lcs) expect(@callback_s2_s1.matched_a).to eq(correct_lcs) end - it 'has the correct LCS result on right-matches' do + it "has the correct LCS result on right-matches" do expect(@callback_s1_s2.matched_b).to eq(correct_lcs) expect(@callback_s2_s1.matched_b).to eq(correct_lcs) end - it 'has the correct skipped sequences with the left sequence' do + it "has the correct skipped sequences with the left sequence" do expect(@callback_s1_s2.discards_a).to eq(skipped_seq1) expect(@callback_s2_s1.discards_a).to eq(skipped_seq2) end - it 'has the correct skipped sequences with the right sequence' do + it "has the correct skipped sequences with the right sequence" do expect(@callback_s1_s2.discards_b).to eq(skipped_seq2) expect(@callback_s2_s1.discards_b).to eq(skipped_seq1) end - it 'does not have anything done markers from the left or right sequences' do + it "does not have anything done markers from the left or right sequences" do expect(@callback_s1_s2.done_a).to be_empty expect(@callback_s1_s2.done_b).to be_empty expect(@callback_s2_s1.done_a).to be_empty @@ -41,64 +41,64 @@ describe 'Diff::LCS.traverse_sequences' do end end - describe 'over (hello, hello)' do + describe "over (hello, hello)" do before(:each) do @callback = simple_callback_no_finishers Diff::LCS.traverse_sequences(hello, hello, @callback) end - it 'has the correct LCS result on left-matches' do - expect(@callback.matched_a).to eq(hello.split(//)) + it "has the correct LCS result on left-matches" do + expect(@callback.matched_a).to eq(hello.chars) end - it 'has the correct LCS result on right-matches' do - expect(@callback.matched_b).to eq(hello.split(//)) + it "has the correct LCS result on right-matches" do + expect(@callback.matched_b).to eq(hello.chars) end - it 'has the correct skipped sequences with the left sequence', :only => true do + it "has the correct skipped sequences with the left sequence" do expect(@callback.discards_a).to be_empty end - it 'has the correct skipped sequences with the right sequence' do + it "has the correct skipped sequences with the right sequence" do expect(@callback.discards_b).to be_empty end - it 'does not have anything done markers from the left or right sequences' do + it "does not have anything done markers from the left or right sequences" do expect(@callback.done_a).to be_empty expect(@callback.done_b).to be_empty end end - describe 'over (hello_ary, hello_ary)' do + describe "over (hello_ary, hello_ary)" do before(:each) do @callback = simple_callback_no_finishers Diff::LCS.traverse_sequences(hello_ary, hello_ary, @callback) end - it 'has the correct LCS result on left-matches' do + it "has the correct LCS result on left-matches" do expect(@callback.matched_a).to eq(hello_ary) end - it 'has the correct LCS result on right-matches' do + it "has the correct LCS result on right-matches" do expect(@callback.matched_b).to eq(hello_ary) end - it 'has the correct skipped sequences with the left sequence' do + it "has the correct skipped sequences with the left sequence" do expect(@callback.discards_a).to be_empty end - it 'has the correct skipped sequences with the right sequence' do + it "has the correct skipped sequences with the right sequence" do expect(@callback.discards_b).to be_empty end - it 'does not have anything done markers from the left or right sequences' do + it "does not have anything done markers from the left or right sequences" do expect(@callback.done_a).to be_empty expect(@callback.done_b).to be_empty end end end - describe 'callback with finisher' do + describe "callback with finisher" do before(:each) do @callback_s1_s2 = simple_callback Diff::LCS.traverse_sequences(seq1, seq2, @callback_s1_s2) @@ -106,32 +106,32 @@ describe 'Diff::LCS.traverse_sequences' do Diff::LCS.traverse_sequences(seq2, seq1, @callback_s2_s1) end - it 'has the correct LCS result on left-matches' do + it "has the correct LCS result on left-matches" do expect(@callback_s1_s2.matched_a).to eq(correct_lcs) expect(@callback_s2_s1.matched_a).to eq(correct_lcs) end - it 'has the correct LCS result on right-matches' do + it "has the correct LCS result on right-matches" do expect(@callback_s1_s2.matched_b).to eq(correct_lcs) expect(@callback_s2_s1.matched_b).to eq(correct_lcs) end - it 'has the correct skipped sequences for the left sequence' do + it "has the correct skipped sequences for the left sequence" do expect(@callback_s1_s2.discards_a).to eq(skipped_seq1) expect(@callback_s2_s1.discards_a).to eq(skipped_seq2) end - it 'has the correct skipped sequences for the right sequence' do + it "has the correct skipped sequences for the right sequence" do expect(@callback_s1_s2.discards_b).to eq(skipped_seq2) expect(@callback_s2_s1.discards_b).to eq(skipped_seq1) end - it 'has done markers differently-sized sequences' do - expect(@callback_s1_s2.done_a).to eq([['p', 9, 't', 11]]) + it "has done markers differently-sized sequences" do + expect(@callback_s1_s2.done_a).to eq([["p", 9, "t", 11]]) expect(@callback_s1_s2.done_b).to be_empty expect(@callback_s2_s1.done_a).to be_empty - expect(@callback_s2_s1.done_b).to eq([['t', 11, 'p', 9]]) + expect(@callback_s2_s1.done_b).to eq([["t", 11, "p", 9]]) end end end |