2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-02-25 19:34:46 +01:00
|
|
|
require "options"
|
|
|
|
|
2024-02-18 15:11:11 -08:00
|
|
|
RSpec.describe Options do
|
2021-01-31 13:14:23 -05:00
|
|
|
subject(:options) { described_class.new }
|
|
|
|
|
2017-02-25 19:34:46 +01:00
|
|
|
it "removes duplicate options" do
|
2021-01-31 13:14:23 -05:00
|
|
|
options << Option.new("foo")
|
|
|
|
options << Option.new("foo")
|
|
|
|
expect(options).to include("--foo")
|
|
|
|
expect(options.count).to eq(1)
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
2019-04-01 16:02:13 -04:00
|
|
|
it "preserves existing member when adding a duplicate" do
|
2017-02-25 19:34:46 +01:00
|
|
|
a = Option.new("foo", "bar")
|
|
|
|
b = Option.new("foo", "qux")
|
2021-01-31 13:14:23 -05:00
|
|
|
options << a << b
|
|
|
|
expect(options.count).to eq(1)
|
|
|
|
expect(options.first).to be(a)
|
|
|
|
expect(options.first.description).to eq(a.description)
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#include?" do
|
2021-01-31 13:14:23 -05:00
|
|
|
options << Option.new("foo")
|
|
|
|
expect(options).to include("--foo")
|
|
|
|
expect(options).to include("foo")
|
|
|
|
expect(options).to include(Option.new("foo"))
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "#+" do
|
|
|
|
it "returns options" do
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(options + described_class.new).to be_an_instance_of(described_class)
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#-" do
|
|
|
|
it "returns options" do
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(options - described_class.new).to be_an_instance_of(described_class)
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
specify "#&" do
|
|
|
|
foo, bar, baz = %w[foo bar baz].map { |o| Option.new(o) }
|
2021-01-31 13:14:23 -05:00
|
|
|
other_options = described_class.new << foo << bar
|
|
|
|
options << foo << baz
|
|
|
|
expect((options & other_options).to_a).to eq([foo])
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#|" do
|
|
|
|
foo, bar, baz = %w[foo bar baz].map { |o| Option.new(o) }
|
2021-01-31 13:14:23 -05:00
|
|
|
other_options = described_class.new << foo << bar
|
|
|
|
options << foo << baz
|
|
|
|
expect((options | other_options).sort).to eq([foo, bar, baz].sort)
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#*" do
|
2021-01-31 13:14:23 -05:00
|
|
|
options << Option.new("aa") << Option.new("bb") << Option.new("cc")
|
|
|
|
expect((options * "XX").split("XX").sort).to eq(%w[--aa --bb --cc])
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "<<" do
|
|
|
|
it "returns itself" do
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(options << Option.new("foo")).to be options
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
specify "#as_flags" do
|
2021-01-31 13:14:23 -05:00
|
|
|
options << Option.new("foo")
|
|
|
|
expect(options.as_flags).to eq(%w[--foo])
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#to_a" do
|
|
|
|
option = Option.new("foo")
|
2021-01-31 13:14:23 -05:00
|
|
|
options << option
|
|
|
|
expect(options.to_a).to eq([option])
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "#to_ary" do
|
|
|
|
option = Option.new("foo")
|
2021-01-31 13:14:23 -05:00
|
|
|
options << option
|
|
|
|
expect(options.to_ary).to eq([option])
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
specify "::create_with_array" do
|
|
|
|
array = %w[--foo --bar]
|
|
|
|
option1 = Option.new("foo")
|
|
|
|
option2 = Option.new("bar")
|
2018-03-25 13:30:37 +01:00
|
|
|
expect(described_class.create(array).sort).to eq([option1, option2].sort)
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
|
2023-01-19 12:16:03 -05:00
|
|
|
specify "#to_s" do
|
|
|
|
expect(options.to_s).to eq("")
|
|
|
|
options << Option.new("first")
|
|
|
|
expect(options.to_s).to eq("--first")
|
|
|
|
options << Option.new("second")
|
|
|
|
expect(options.to_s).to eq("--first --second")
|
|
|
|
end
|
|
|
|
|
2017-02-25 19:34:46 +01:00
|
|
|
specify "#inspect" do
|
2021-01-31 13:14:23 -05:00
|
|
|
expect(options.inspect).to eq("#<Options: []>")
|
|
|
|
options << Option.new("foo")
|
|
|
|
expect(options.inspect).to eq("#<Options: [#<Option: \"--foo\">]>")
|
2017-02-25 19:34:46 +01:00
|
|
|
end
|
|
|
|
end
|