lapis-minecraft-versioning 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.codeclimate.yml +18 -0
- data/.gitignore +151 -0
- data/.rspec +3 -0
- data/.rubocop.yml +1156 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.md +16 -0
- data/README.md +83 -0
- data/Rakefile +28 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lapis-minecraft-versioning.gemspec +35 -0
- data/lib/lapis/minecraft/version.rb +89 -0
- data/lib/lapis/minecraft/versioning.rb +26 -0
- data/lib/lapis/minecraft/versioning/asset.rb +44 -0
- data/lib/lapis/minecraft/versioning/asset_index.rb +61 -0
- data/lib/lapis/minecraft/versioning/basic.rb +56 -0
- data/lib/lapis/minecraft/versioning/detailed.rb +69 -0
- data/lib/lapis/minecraft/versioning/launcher_properties.rb +48 -0
- data/lib/lapis/minecraft/versioning/library.rb +51 -0
- data/lib/lapis/minecraft/versioning/manifest.rb +49 -0
- data/lib/lapis/minecraft/versioning/marshalling.rb +15 -0
- data/lib/lapis/minecraft/versioning/marshalling/asset_index_parser.rb +41 -0
- data/lib/lapis/minecraft/versioning/marshalling/manifest_parser.rb +66 -0
- data/lib/lapis/minecraft/versioning/marshalling/version_parser.rb +204 -0
- data/lib/lapis/minecraft/versioning/meta_server.rb +52 -0
- data/lib/lapis/minecraft/versioning/os_rule.rb +45 -0
- data/lib/lapis/minecraft/versioning/resource.rb +44 -0
- data/lib/lapis/minecraft/versioning/resource_set.rb +61 -0
- data/lib/lapis/minecraft/versioning/rule.rb +32 -0
- data/lib/lapis/minecraft/versioning/version.rb +7 -0
- data/lib/lapis/minecraft/versioning/version_list.rb +64 -0
- data/spec/factories/asset_factory.rb +11 -0
- data/spec/factories/asset_index_document_factory.rb +25 -0
- data/spec/factories/asset_index_factory.rb +15 -0
- data/spec/factories/basic_factory.rb +28 -0
- data/spec/factories/detailed_factory.rb +16 -0
- data/spec/factories/launcher_properties_factory.rb +11 -0
- data/spec/factories/library_factory.rb +21 -0
- data/spec/factories/manifest_document_factory.rb +48 -0
- data/spec/factories/manifest_factory.rb +12 -0
- data/spec/factories/meta_server_mock_factory.rb +33 -0
- data/spec/factories/os_rule_factory.rb +30 -0
- data/spec/factories/resource_factory.rb +32 -0
- data/spec/factories/resource_set_factory.rb +16 -0
- data/spec/factories/rule_factory.rb +17 -0
- data/spec/factories/version_document_factory.rb +176 -0
- data/spec/factories/version_factory.rb +18 -0
- data/spec/lapis/minecraft/version_spec.rb +181 -0
- data/spec/lapis/minecraft/versioning/asset_index_spec.rb +89 -0
- data/spec/lapis/minecraft/versioning/asset_spec.rb +65 -0
- data/spec/lapis/minecraft/versioning/basic_spec.rb +75 -0
- data/spec/lapis/minecraft/versioning/detailed_spec.rb +175 -0
- data/spec/lapis/minecraft/versioning/launcher_properties_spec.rb +73 -0
- data/spec/lapis/minecraft/versioning/library_spec.rb +91 -0
- data/spec/lapis/minecraft/versioning/manifest_spec.rb +71 -0
- data/spec/lapis/minecraft/versioning/marshalling/asset_index_parser_spec.rb +27 -0
- data/spec/lapis/minecraft/versioning/marshalling/manifest_parser_spec.rb +74 -0
- data/spec/lapis/minecraft/versioning/marshalling/version_parser_spec.rb +101 -0
- data/spec/lapis/minecraft/versioning/meta_server_spec.rb +59 -0
- data/spec/lapis/minecraft/versioning/os_rule_spec.rb +73 -0
- data/spec/lapis/minecraft/versioning/resource_set_spec.rb +87 -0
- data/spec/lapis/minecraft/versioning/resource_spec.rb +55 -0
- data/spec/lapis/minecraft/versioning/rule_spec.rb +36 -0
- data/spec/lapis/minecraft/versioning/version_list_spec.rb +66 -0
- data/spec/spec_helper.rb +90 -0
- data/spec/time_helper.rb +39 -0
- metadata +289 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Lapis::Minecraft::Versioning::Library do
|
4
|
+
|
5
|
+
describe '#name' do
|
6
|
+
let(:name) { 'some.mc:library:5.0' }
|
7
|
+
let(:library) { build(:library, :name => name) }
|
8
|
+
subject { library.name }
|
9
|
+
|
10
|
+
it 'is the expected value' do
|
11
|
+
is_expected.to eq name
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'is frozen' do
|
15
|
+
is_expected.to be_frozen
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#resources' do
|
20
|
+
let(:resources) { build(:resource_set) }
|
21
|
+
let(:library) { build(:library, :resources => resources) }
|
22
|
+
subject { library.resources }
|
23
|
+
|
24
|
+
it 'has the expected value' do
|
25
|
+
is_expected.to eq resources
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#rules' do
|
30
|
+
let(:rules) { build_list(:rule, 5) }
|
31
|
+
let(:library) { build(:library, :rules => rules) }
|
32
|
+
subject { library.rules }
|
33
|
+
|
34
|
+
it 'cloned the array' do
|
35
|
+
is_expected.not_to be rules
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'has the same elements' do
|
39
|
+
is_expected.to contain_exactly(*rules)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'is frozen' do
|
43
|
+
is_expected.to be_frozen
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#exclude_paths' do
|
48
|
+
let(:paths) { build_list(:library_path, 5) }
|
49
|
+
let(:library) { build(:library, :paths => paths) }
|
50
|
+
subject { library.exclude_paths }
|
51
|
+
|
52
|
+
it 'cloned the array' do
|
53
|
+
is_expected.not_to be paths
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'has the same elements' do
|
57
|
+
is_expected.to contain_exactly(*paths)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'is frozen' do
|
61
|
+
is_expected.to be_frozen
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'has frozen contents' do
|
65
|
+
is_expected.to all(be_frozen)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#==' do
|
70
|
+
subject { library_1 == library_2 }
|
71
|
+
|
72
|
+
context 'with identical libraries' do
|
73
|
+
let(:library_1) { build(:library) }
|
74
|
+
let(:library_2) { Lapis::Minecraft::Versioning::Library.new(library_1.name, library_1.resources, library_1.rules, library_1.exclude_paths) }
|
75
|
+
|
76
|
+
it 'is true' do
|
77
|
+
is_expected.to be true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'with different libraries' do
|
82
|
+
let(:library_1) { build(:library) }
|
83
|
+
let(:library_2) { build(:library, :name => library_1.name + '-foobar') }
|
84
|
+
|
85
|
+
it 'is false' do
|
86
|
+
is_expected.to be false
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Lapis::Minecraft::Versioning::Manifest do
|
4
|
+
let(:versions) { build_list(:basic, 5) }
|
5
|
+
let(:latest_release) { versions.first }
|
6
|
+
let(:latest_snapshot) { versions.last }
|
7
|
+
subject(:manifest) { build(:manifest, :versions => versions, :latest_release_id => latest_release.id, :latest_snapshot_id => latest_snapshot.id) }
|
8
|
+
|
9
|
+
describe '#each' do
|
10
|
+
subject { manifest.each }
|
11
|
+
|
12
|
+
it 'returns an enumerator' do
|
13
|
+
expect(subject).to be_an Enumerator
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'yields basic info' do
|
17
|
+
args = []
|
18
|
+
manifest.each do |arg|
|
19
|
+
args << arg
|
20
|
+
end
|
21
|
+
expect(args).to all(be_a Lapis::Minecraft::Versioning::Basic)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'yields every version' do
|
25
|
+
expect { |b| manifest.each(&b) }.to yield_control.exactly(versions.count).times
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'yields the expected versions' do
|
29
|
+
expect(manifest).to contain_exactly(*versions)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#latest_release' do
|
34
|
+
subject { manifest.latest_release }
|
35
|
+
|
36
|
+
it 'is the expected value' do
|
37
|
+
is_expected.to be latest_release
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#latest_release' do
|
42
|
+
subject { manifest.latest_release }
|
43
|
+
|
44
|
+
it 'is the expected value' do
|
45
|
+
is_expected.to be latest_release
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#==' do
|
50
|
+
subject { manifest_1 == manifest_2 }
|
51
|
+
|
52
|
+
context 'with identical manifests' do
|
53
|
+
let(:manifest_1) { build(:manifest) }
|
54
|
+
let(:manifest_2) { Lapis::Minecraft::Versioning::Manifest.new(manifest_1.entries, manifest_1.latest_release.id, manifest_1.latest_snapshot.id) }
|
55
|
+
|
56
|
+
it 'is true' do
|
57
|
+
is_expected.to be true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'with different manifests' do
|
62
|
+
let(:manifest_1) { build(:manifest) }
|
63
|
+
let(:manifest_2) { build(:manifest, :versions => manifest_1.entries + [build(:basic)]) }
|
64
|
+
|
65
|
+
it 'is false' do
|
66
|
+
is_expected.to be false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Lapis::Minecraft::Versioning::Marshalling::AssetIndexParser do
|
4
|
+
let(:index) { build(:asset_index_document) }
|
5
|
+
let(:assets) { index.assets }
|
6
|
+
let(:document) { index.document }
|
7
|
+
subject(:parser) { Lapis::Minecraft::Versioning::Marshalling::AssetIndexParser.new }
|
8
|
+
|
9
|
+
describe '#parse' do
|
10
|
+
subject { parser.parse(document) }
|
11
|
+
|
12
|
+
it 'generates a list of assets' do
|
13
|
+
is_expected.to all(be_an Lapis::Minecraft::Versioning::Asset)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'has the expected assets' do
|
17
|
+
# FIXME: This test is longer and more complicated than I would like.
|
18
|
+
subject.zip(assets).each do |actual, expected|
|
19
|
+
path, attributes = expected
|
20
|
+
expect(actual.path).to eq path
|
21
|
+
expect(actual.sha1).to eq attributes[:hash]
|
22
|
+
expect(actual.size).to eq attributes[:size]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Lapis::Minecraft::Versioning::Marshalling::ManifestParser do
|
4
|
+
let(:manifest) { build(:manifest_document) }
|
5
|
+
let(:latest_release) { manifest.source.latest_release }
|
6
|
+
let(:latest_snapshot) { manifest.source.latest_snapshot }
|
7
|
+
let(:versions) { manifest.source.entries }
|
8
|
+
let(:document) { manifest.document }
|
9
|
+
subject(:parser) { Lapis::Minecraft::Versioning::Marshalling::ManifestParser.new }
|
10
|
+
|
11
|
+
describe '#parse' do
|
12
|
+
subject(:result) { parser.parse(document) }
|
13
|
+
|
14
|
+
it 'has the expected versions' do
|
15
|
+
is_expected.to contain_exactly(*versions)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.latest_release' do
|
19
|
+
subject(:version) { result.latest_release }
|
20
|
+
|
21
|
+
it 'is the expected version' do
|
22
|
+
is_expected.to eq latest_release
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.latest_snapshot' do
|
27
|
+
subject(:version) { result.latest_snapshot }
|
28
|
+
|
29
|
+
it 'is the expected version' do
|
30
|
+
is_expected.to eq latest_snapshot
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when versions contain' do
|
35
|
+
let(:versions) { [version] }
|
36
|
+
let(:source) { build(:manifest, :versions => versions) }
|
37
|
+
let(:manifest) { build(:manifest_document, :source => source) }
|
38
|
+
subject { result.first.type }
|
39
|
+
|
40
|
+
context 'an alpha' do
|
41
|
+
let(:version) { build(:basic, :alpha) }
|
42
|
+
|
43
|
+
it 'sets the type to :alpha' do
|
44
|
+
is_expected.to eq :alpha
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'a beta' do
|
49
|
+
let(:version) { build(:basic, :beta) }
|
50
|
+
|
51
|
+
it 'sets the type to :beta' do
|
52
|
+
is_expected.to eq :beta
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'a snapshot' do
|
57
|
+
let(:version) { build(:basic, :snapshot) }
|
58
|
+
|
59
|
+
it 'sets the type to :snapshot' do
|
60
|
+
is_expected.to eq :snapshot
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'a release' do
|
65
|
+
let(:version) { build(:basic, :release) }
|
66
|
+
|
67
|
+
it 'sets the type to :release' do
|
68
|
+
is_expected.to eq :release
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require_relative '../../../../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Lapis::Minecraft::Versioning::Marshalling::VersionParser do
|
4
|
+
let(:source) { build(:detailed) }
|
5
|
+
let(:version) { build(:version_document, :source => source) }
|
6
|
+
let(:document) { version.document }
|
7
|
+
subject(:parser) { Lapis::Minecraft::Versioning::Marshalling::VersionParser.new }
|
8
|
+
|
9
|
+
describe '#parse' do
|
10
|
+
subject(:result) { parser.parse(document, "http://example.com/minecraft/#{source.id}.json") }
|
11
|
+
|
12
|
+
describe '.id' do
|
13
|
+
subject { result.id }
|
14
|
+
|
15
|
+
it 'is the expected value' do
|
16
|
+
is_expected.to eq source.id
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.type' do
|
21
|
+
subject { result.type }
|
22
|
+
|
23
|
+
context 'with an alpha' do
|
24
|
+
let(:source) { build(:detailed, :type => :alpha) }
|
25
|
+
|
26
|
+
it 'is :alpha' do
|
27
|
+
is_expected.to eq :alpha
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'with a beta' do
|
32
|
+
let(:source) { build(:detailed, :type => :beta) }
|
33
|
+
|
34
|
+
it 'is :beta' do
|
35
|
+
is_expected.to eq :beta
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'with a snapshot' do
|
40
|
+
let(:source) { build(:detailed, :type => :snapshot) }
|
41
|
+
|
42
|
+
it 'is :snapshot' do
|
43
|
+
is_expected.to eq :snapshot
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'with a release' do
|
48
|
+
let(:source) { build(:detailed, :type => :release) }
|
49
|
+
|
50
|
+
it 'is :release' do
|
51
|
+
is_expected.to eq :release
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '.time' do
|
57
|
+
subject { result.time }
|
58
|
+
|
59
|
+
it 'is the expected value' do
|
60
|
+
is_expected.to eq source.time
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '.asset_index' do
|
65
|
+
subject(:index) { result.asset_index }
|
66
|
+
|
67
|
+
it 'has the expected values' do
|
68
|
+
is_expected.to eq source.asset_index
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '.downloads' do
|
73
|
+
subject(:downloads) { result.downloads }
|
74
|
+
|
75
|
+
it 'has the expected contents' do
|
76
|
+
is_expected.to contain_exactly(*source.downloads)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '.libraries' do
|
81
|
+
let(:rule) { build(:rule) }
|
82
|
+
let(:os_rule) { build(:os_rule) }
|
83
|
+
let(:source_libraries) { build_list(:library, 5, :rules => [rule, os_rule]) }
|
84
|
+
let(:source) { build(:detailed, :libraries => source_libraries) }
|
85
|
+
subject(:libraries) { result.libraries }
|
86
|
+
|
87
|
+
it 'has the expected contents' do
|
88
|
+
is_expected.to contain_exactly(*source.libraries)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe '.launcher_properties' do
|
93
|
+
subject(:launcher) { result.launcher_properties }
|
94
|
+
|
95
|
+
it 'has the expected values' do
|
96
|
+
is_expected.to eq source.launcher_properties
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'httpclient'
|
2
|
+
|
3
|
+
RSpec.describe Lapis::Minecraft::Versioning::MetaServer do
|
4
|
+
let(:manifest) { build(:manifest) }
|
5
|
+
let(:detailed) { build(:detailed) }
|
6
|
+
let(:assets) { build_list(:asset, 5) }
|
7
|
+
let(:manifest_document) { build(:manifest_document, :source => manifest) }
|
8
|
+
let(:version_document) { build(:version_document, :source => detailed) }
|
9
|
+
let(:asset_index_document) { build(:asset_index_document, :assets => assets) }
|
10
|
+
let(:manifest_url) { 'http://example.com/minecraft/version_manifest.json' }
|
11
|
+
let(:version_url) { 'http://example.com/minecraft/versions/1.0.json' }
|
12
|
+
let(:assets_url) { 'http://example.com/minecraft/assets/1.0.json' }
|
13
|
+
let(:client) { double('HTTPClient') }
|
14
|
+
subject(:meta_server) { Lapis::Minecraft::Versioning::MetaServer.new(client) }
|
15
|
+
before do
|
16
|
+
allow(client).to receive(:get) do |url, *_|
|
17
|
+
case url
|
18
|
+
when manifest_url
|
19
|
+
HTTP::Message.new_response(manifest_document.document)
|
20
|
+
when version_url
|
21
|
+
HTTP::Message.new_response(version_document.document)
|
22
|
+
when assets_url
|
23
|
+
HTTP::Message.new_response(asset_index_document.document)
|
24
|
+
else
|
25
|
+
HTTP::Message.new_response(nil).tap do |response|
|
26
|
+
response.status = 404
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#get_manifest' do
|
33
|
+
subject(:result) { meta_server.get_manifest(manifest_url) }
|
34
|
+
before { expect(client).to receive(:get).with(manifest_url) }
|
35
|
+
|
36
|
+
it 'returns a Manifest instance' do
|
37
|
+
is_expected.to be_a Lapis::Minecraft::Versioning::Manifest
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#get_version' do
|
42
|
+
subject(:result) { meta_server.get_details(version_url) }
|
43
|
+
before { expect(client).to receive(:get).with(version_url) }
|
44
|
+
|
45
|
+
it 'returns a Detailed instance' do
|
46
|
+
is_expected.to be_a Lapis::Minecraft::Versioning::Detailed
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#get_assets' do
|
51
|
+
subject(:result) { meta_server.get_assets(assets_url) }
|
52
|
+
before { expect(client).to receive(:get).with(assets_url) }
|
53
|
+
|
54
|
+
it 'returns a list of assets' do
|
55
|
+
is_expected.to all(be_an Lapis::Minecraft::Versioning::Asset)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative '../../../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Lapis::Minecraft::Versioning::OSRule do
|
4
|
+
|
5
|
+
describe '#allowed?' do
|
6
|
+
let(:rule) { build(:os_rule, :allow) }
|
7
|
+
subject { rule.allowed? }
|
8
|
+
|
9
|
+
it 'is the expected value' do
|
10
|
+
is_expected.to be_truthy
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#os_type' do
|
15
|
+
let(:rule) { build(:os_rule, :linux) }
|
16
|
+
subject { rule.os_type }
|
17
|
+
|
18
|
+
it 'is the expected value' do
|
19
|
+
is_expected.to eq :linux
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#os_version' do
|
24
|
+
subject { rule.os_version }
|
25
|
+
|
26
|
+
context 'with version specified' do
|
27
|
+
let(:rule) { build(:os_rule, :os_version => '^5\\.0$') }
|
28
|
+
|
29
|
+
it 'is a Regexp' do
|
30
|
+
is_expected.to be_a Regexp
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'is the expected regular expression' do
|
34
|
+
expect(subject.match '5.0')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'without version specified' do
|
39
|
+
let(:rule) { build(:os_rule, :no_version) }
|
40
|
+
|
41
|
+
it 'is a Regexp' do
|
42
|
+
is_expected.to be_a Regexp
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'matches any version' do
|
46
|
+
expect(subject.match '5.0')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#==' do
|
52
|
+
subject { rule_1 == rule_2 }
|
53
|
+
|
54
|
+
context 'with identical rules' do
|
55
|
+
let(:rule_1) { build(:os_rule) }
|
56
|
+
let(:rule_2) { Lapis::Minecraft::Versioning::OSRule.new(rule_1.allowed?, rule_1.os_type, rule_1.os_version.source) }
|
57
|
+
|
58
|
+
it 'is true' do
|
59
|
+
is_expected.to be true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'with different rules' do
|
64
|
+
let(:rule_1) { build(:os_rule) }
|
65
|
+
let(:rule_2) { build(:os_rule, :os_version => rule_1.os_version.source + '-foobar') }
|
66
|
+
|
67
|
+
it 'is false' do
|
68
|
+
is_expected.to be false
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|