Sha256: e023c940b420d7575f552f0212e6cc6438513547722a0845e457622565b98c22

Contents?: true

Size: 1.78 KB

Versions: 32

Compression:

Stored size: 1.78 KB

Contents

require 'lib/spec_helper'
require 'support/rewriters_helper'
require 'opal/rewriters/hashes/key_duplicates_rewriter'

RSpec.describe Opal::Rewriters::Hashes::KeyDuplicatesRewriter do
  include RewritersHelper

  shared_examples 'it warns' do |code, key_to_warn|
    context "for #{code} code" do
      it "warns about #{key_to_warn.inspect} being overwritten" do
        expect(Kernel).to receive(:warn).with("warning: key #{key_to_warn.inspect} is duplicated and overwritten")

        ast = parse_without_rewriting(code)
        rewrite(ast)
      end
    end
  end

  include_examples 'it warns', '{ a: 1, a: 2 }',             :a
  include_examples 'it warns', '{ a: 1, **{ a: 2 } }',       :a
  include_examples 'it warns', '{ a: 1, **{ **{ a: 2 } } }', :a

  include_examples 'it warns', '{ "a" => 1, "a" => 2 }',             'a'
  include_examples 'it warns', '{ "a" => 1, **{ "a" => 2 } }',       'a'
  include_examples 'it warns', '{ "a" => 1, **{ **{ "a" => 2 } } }', 'a'

  shared_examples 'it does not warn' do |code|
    context "for #{code} code" do
      it "does not warn anything" do
        expect(Kernel).to_not receive(:warn).with(/is duplicated and overwritten/)

        ast = parse_without_rewriting(code)
        rewrite(ast)
      end
    end
  end

  include_examples 'it does not warn', '{ a: 1 }'
  include_examples 'it does not warn', '{ a: 1, "a" => 2 }'
  include_examples 'it does not warn', '{ "a" => 1, a: 2 }'
  include_examples 'it does not warn', '{ a: 1, **{ "a" => 2 } }'
  include_examples 'it does not warn', '{ "a" => 1, **{ a: 2 } }'
  include_examples 'it does not warn', '{ a: 1, nested: { a: 2 } }'

  include_examples 'it does not warn', 'key = "key"; { "#{key}" => 1, "#{key}" => 2 }'
  include_examples 'it does not warn', 'key = "key"; { :"#{key}" => 1, :"#{key}" => 2 }'
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
opal-1.8.2 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.8.1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.8.0 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.8.0.beta1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.7.4 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.8.0.alpha1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.7.3 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.7.2 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.7.1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.7.0 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.7.0.rc1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.6.1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.6.0 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.6.0.rc1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.6.0.alpha1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.5.1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.5.0 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.5.0.rc1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.4.1 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb
opal-1.4.0 spec/lib/rewriters/hashes/key_duplicates_rewriter_spec.rb