spec/mixlib/versioning/versioning_spec.rb in mixlib-versioning-1.0.0 vs spec/mixlib/versioning/versioning_spec.rb in mixlib-versioning-1.1.0
- old
+ new
@@ -1,7 +1,7 @@
#
-# Author:: Seth Chisamore (<schisamo@opscode.com>)
+# Author:: Seth Chisamore (<schisamo@chef.io>)
# Copyright:: Copyright (c) 2013 Opscode, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,243 +17,265 @@
#
require 'spec_helper'
describe Mixlib::Versioning do
+ subject { described_class }
- subject{ described_class }
+ let(:version_string) { '11.0.0' }
- let(:version_string){ "11.0.0" }
-
- describe ".parse" do
-
- describe "parsing when format type is specified" do
+ describe '.parse' do
+ describe 'parsing when format type is specified' do
{
- "11.0.8" => {
- :format_type => :semver,
- :expected_format => Mixlib::Versioning::Format::SemVer
+ '11.0.8' => {
+ format_type: :semver,
+ expected_format: Mixlib::Versioning::Format::SemVer,
},
- "11.1.1" => {
- :format_type => :rubygems,
- :expected_format => Mixlib::Versioning::Format::Rubygems
+ '11.1.1' => {
+ format_type: :rubygems,
+ expected_format: Mixlib::Versioning::Format::Rubygems,
},
- "11.1.1.alpha.1" => {
- :format_type => :rubygems,
- :expected_format => Mixlib::Versioning::Format::Rubygems
+ '11.1.1.alpha.1' => {
+ format_type: :rubygems,
+ expected_format: Mixlib::Versioning::Format::Rubygems,
},
- "11.1.1-alpha.1" => {
- :format_type => :opscode_semver,
- :expected_format => Mixlib::Versioning::Format::OpscodeSemVer
+ '11.1.1-alpha.1' => {
+ format_type: :opscode_semver,
+ expected_format: Mixlib::Versioning::Format::OpscodeSemVer,
},
- "11.1.1-rc.2" => {
- :format_type => :opscode_semver,
- :expected_format => Mixlib::Versioning::Format::SemVer
- }
+ '11.1.1-rc.2' => {
+ format_type: :opscode_semver,
+ expected_format: Mixlib::Versioning::Format::SemVer,
+ },
}.each_pair do |version_string, options|
-
context "#{version_string} as #{options[:expected_format]}" do
- let(:version_string){ version_string }
- let(:expected_format){ options[:expected_format] }
+ let(:version_string) { version_string }
+ let(:expected_format) { options[:expected_format] }
[
options[:format_type],
options[:format_type].to_s,
- options[:expected_format]
+ options[:expected_format],
].each do |format_type|
-
context "format type as a: #{format_type.class}" do
it "parses version string as: #{options[:expected_format]}" do
result = subject.parse(version_string, format_type)
result.should be_a(expected_format)
end # it
end # context
-
end # each
end # context
end # each_pair
-
- describe "invalid format type specified" do
+ describe 'invalid format type specified' do
[
:poop,
- "poop",
- Mixlib::Versioning
+ 'poop',
+ Mixlib::Versioning,
].each do |invalid_format_type|
-
context "invalid format as a: #{invalid_format_type.class}" do
- it "raises a Mixlib::Versioning::UnknownFormatError" do
+ it 'raises a Mixlib::Versioning::UnknownFormatError' do
expect { subject.parse(version_string, invalid_format_type) }.to raise_error(Mixlib::Versioning::UnknownFormatError)
end # it
end # context
-
end # each
-
end # describe
end # describe
- describe "parsing with automatic format detection" do
+ describe 'parsing with automatic format detection' do
{
- "11.0.8" => Mixlib::Versioning::Format::SemVer,
- "11.0.8-1" => Mixlib::Versioning::Format::SemVer,
- "11.0.8.rc.1" => Mixlib::Versioning::Format::Rubygems,
- "11.0.8.rc.1-1" => Mixlib::Versioning::Format::Rubygems,
- "11.0.8-rc.1" => Mixlib::Versioning::Format::OpscodeSemVer,
+ '11.0.8' => Mixlib::Versioning::Format::SemVer,
+ '11.0.8-1' => Mixlib::Versioning::Format::SemVer,
+ '11.0.8.rc.1' => Mixlib::Versioning::Format::Rubygems,
+ '11.0.8.rc.1-1' => Mixlib::Versioning::Format::Rubygems,
+ '11.0.8-rc.1' => Mixlib::Versioning::Format::OpscodeSemVer,
- "10.18.2" => Mixlib::Versioning::Format::SemVer,
- "10.18.2-poop" => Mixlib::Versioning::Format::SemVer,
- "10.18.2.poop" => Mixlib::Versioning::Format::Rubygems,
- "10.18.2.poop-1" => Mixlib::Versioning::Format::Rubygems,
+ '10.18.2' => Mixlib::Versioning::Format::SemVer,
+ '10.18.2-poop' => Mixlib::Versioning::Format::SemVer,
+ '10.18.2.poop' => Mixlib::Versioning::Format::Rubygems,
+ '10.18.2.poop-1' => Mixlib::Versioning::Format::Rubygems,
- "12.1.1+20130311134422" => Mixlib::Versioning::Format::OpscodeSemVer,
- "12.1.1-rc.3+20130311134422" => Mixlib::Versioning::Format::OpscodeSemVer,
- "12.1.1+20130308110833.git.2.94a1dde" => Mixlib::Versioning::Format::OpscodeSemVer,
+ '12.1.1+20130311134422' => Mixlib::Versioning::Format::OpscodeSemVer,
+ '12.1.1-rc.3+20130311134422' => Mixlib::Versioning::Format::OpscodeSemVer,
+ '12.1.1+20130308110833.git.2.94a1dde' => Mixlib::Versioning::Format::OpscodeSemVer,
- "10.16.2-49-g21353f0" => Mixlib::Versioning::Format::GitDescribe,
- "10.16.2-49-g21353f0-1" => Mixlib::Versioning::Format::GitDescribe,
- "10.16.2.rc.2-49-g21353f0" => Mixlib::Versioning::Format::GitDescribe,
- "10.16.2-rc.2-49-g21353f0" => Mixlib::Versioning::Format::GitDescribe,
+ '10.16.2-49-g21353f0' => Mixlib::Versioning::Format::GitDescribe,
+ '10.16.2-49-g21353f0-1' => Mixlib::Versioning::Format::GitDescribe,
+ '10.16.2.rc.2-49-g21353f0' => Mixlib::Versioning::Format::GitDescribe,
+ '10.16.2-rc.2-49-g21353f0' => Mixlib::Versioning::Format::GitDescribe,
}.each_pair do |version_string, expected_format|
-
context version_string do
- let(:version_string){ version_string }
+ let(:version_string) { version_string }
it "parses version string as: #{expected_format}" do
subject.parse(version_string).should be_a(expected_format)
end # it
end # context
-
end # each_pair
- describe "version_string cannot be parsed" do
- let(:version_string){ "A.B.C" }
- it "returns nil" do
+ describe 'version_string cannot be parsed' do
+ let(:version_string) { 'A.B.C' }
+ it 'returns nil' do
subject.parse(version_string).should be_nil
end
end
-
end # describe "parsing with automatic format detection"
- describe "parsing an Mixlib::Versioning::Format object" do
- it "returns the same object" do
+ describe 'parsing an Mixlib::Versioning::Format object' do
+ it 'returns the same object' do
v = Mixlib::Versioning.parse(version_string)
result = subject.parse(v)
v.should be result
end
end
+ describe 'when formats are given' do
+ context 'when the format is not in the list' do
+ let(:version_string) { '10.16.2-rc.2-49-g21353f0' }
+ it 'returns nil when the array contains a Mixlib::Versioning::Format' do
+ subject.parse(version_string, [Mixlib::Versioning::Format::Rubygems]).should be_nil
+ end
+
+ it 'returns nil when the array contains a string' do
+ subject.parse(version_string, ['rubygems']).should be_nil
+ end
+
+ it 'returns nil when the array contains a symbol' do
+ subject.parse(version_string, [:rubygems]).should be_nil
+ end
+ end
+
+ context 'when the format is in the list' do
+ let(:version_string) { '10.16.2-rc.2-49-g21353f0' }
+ let(:expected_format) { Mixlib::Versioning::Format::GitDescribe }
+ it 'returns nil when the array contains a Mixlib::Versioning::Format' do
+ subject.parse(version_string, [expected_format]).should be_a(expected_format)
+ end
+
+ it 'returns nil when the array contains a string' do
+ subject.parse(version_string, ['git_describe']).should be_a(expected_format)
+ end
+
+ it 'returns nil when the array contains a symbol' do
+ subject.parse(version_string, [:git_describe]).should be_a(expected_format)
+ end
+ end
+ end
end # describe .parse
- describe ".find_target_version" do
- let(:all_versions){%w{
- 11.0.0-beta.1
- 11.0.0-rc.1
- 11.0.0
- 11.0.1
- 11.0.1+2013031116332
- 11.0.2-alpha.0
- 11.0.2-alpha.0+2013041116332
- 11.0.2
- }}
- let(:filter_version){ nil }
- let(:use_prerelease_versions){ false }
- let(:use_build_versions){ false }
+ describe '.find_target_version' do
+ let(:all_versions) do
+ %w(
+ 11.0.0-beta.1
+ 11.0.0-rc.1
+ 11.0.0
+ 11.0.1
+ 11.0.1+2013031116332
+ 11.0.2-alpha.0
+ 11.0.2-alpha.0+2013041116332
+ 11.0.2
+ )
+ end
+ let(:filter_version) { nil }
+ let(:use_prerelease_versions) { false }
+ let(:use_build_versions) { false }
let(:subject_find) do
- subject.find_target_version(all_versions,
- filter_version,
- use_prerelease_versions,
- use_build_versions)
+ subject.find_target_version(
+ all_versions,
+ filter_version,
+ use_prerelease_versions,
+ use_build_versions,
+ )
end
{
nil => {
- :releases_only => "11.0.2",
- :prerelease_versions => "11.0.2-alpha.0",
- :build_versions => "11.0.1+2013031116332",
- :prerelease_and_build_versions => "11.0.2-alpha.0+2013041116332"
+ releases_only: '11.0.2',
+ prerelease_versions: '11.0.2-alpha.0',
+ build_versions: '11.0.1+2013031116332',
+ prerelease_and_build_versions: '11.0.2-alpha.0+2013041116332',
},
- "11.0.0" => {
- :releases_only => "11.0.0",
- :prerelease_versions => "11.0.0-rc.1",
- :build_versions => nil,
- :prerelease_and_build_versions => nil
+ '11.0.0' => {
+ releases_only: '11.0.0',
+ prerelease_versions: '11.0.0-rc.1',
+ build_versions: nil,
+ prerelease_and_build_versions: nil,
},
- "11.0.2" => {
- :releases_only => "11.0.2",
- :prerelease_versions => "11.0.2-alpha.0",
- :build_versions => nil,
- :prerelease_and_build_versions => "11.0.2-alpha.0+2013041116332"
+ '11.0.2' => {
+ releases_only: '11.0.2',
+ prerelease_versions: '11.0.2-alpha.0',
+ build_versions: nil,
+ prerelease_and_build_versions: '11.0.2-alpha.0+2013041116332',
},
- "11.0.2" => {
- :releases_only => "11.0.2",
- :prerelease_versions => "11.0.2-alpha.0",
- :build_versions => nil,
- :prerelease_and_build_versions => "11.0.2-alpha.0+2013041116332"
+ '11.0.2' => {
+ releases_only: '11.0.2',
+ prerelease_versions: '11.0.2-alpha.0',
+ build_versions: nil,
+ prerelease_and_build_versions: '11.0.2-alpha.0+2013041116332',
},
- "11.0.2-alpha.0" => {
- :releases_only => "11.0.2-alpha.0",
- :prerelease_versions => "11.0.2-alpha.0",
- :build_versions => "11.0.2-alpha.0+2013041116332",
- :prerelease_and_build_versions => "11.0.2-alpha.0+2013041116332"
- }
+ '11.0.2-alpha.0' => {
+ releases_only: '11.0.2-alpha.0',
+ prerelease_versions: '11.0.2-alpha.0',
+ build_versions: '11.0.2-alpha.0+2013041116332',
+ prerelease_and_build_versions: '11.0.2-alpha.0+2013041116332',
+ },
}.each_pair do |filter_version, options|
-
context "filter version of: #{filter_version}" do
- let(:filter_version){ filter_version }
- let(:expected_version){ options[:releases_only] }
+ let(:filter_version) { filter_version }
+ let(:expected_version) { options[:releases_only] }
- it "finds the most recent release version" do
+ it 'finds the most recent release version' do
subject_find.should eq Mixlib::Versioning.parse(expected_version)
end
- context "include pre-release versions" do
- let(:use_prerelease_versions){ true }
- let(:expected_version){ options[:prerelease_versions] }
+ context 'include pre-release versions' do
+ let(:use_prerelease_versions) { true }
+ let(:expected_version) { options[:prerelease_versions] }
- it "finds the most recent pre-release version" do
+ it 'finds the most recent pre-release version' do
subject_find.should eq Mixlib::Versioning.parse(expected_version)
end # it
end # context
- context "include build versions" do
- let(:use_build_versions){ true }
- let(:expected_version){ options[:build_versions] }
+ context 'include build versions' do
+ let(:use_build_versions) { true }
+ let(:expected_version) { options[:build_versions] }
- it "finds the most recent build version" do
+ it 'finds the most recent build version' do
subject_find.should eq Mixlib::Versioning.parse(expected_version)
end # it
end # context
- context "include pre-release and build versions" do
- let(:use_prerelease_versions){ true }
- let(:use_build_versions){ true }
- let(:expected_version){ options[:prerelease_and_build_versions] }
+ context 'include pre-release and build versions' do
+ let(:use_prerelease_versions) { true }
+ let(:use_build_versions) { true }
+ let(:expected_version) { options[:prerelease_and_build_versions] }
- it "finds the most recent pre-release build version" do
+ it 'finds the most recent pre-release build version' do
subject_find.should eq Mixlib::Versioning.parse(expected_version)
end # it
end # context
-
end # context
end # each_pair
- describe "all_versions argument is a mix of String and Mixlib::Versioning::Format instances" do
- let(:all_versions){[
- "11.0.0-beta.1",
- "11.0.0-rc.1",
- Mixlib::Versioning.parse("11.0.0")
- ]}
+ describe 'all_versions argument is a mix of String and Mixlib::Versioning::Format instances' do
+ let(:all_versions) do
+ [
+ '11.0.0-beta.1',
+ '11.0.0-rc.1',
+ Mixlib::Versioning.parse('11.0.0'),
+ ]
+ end
- it "correctly parses the array" do
- subject_find.should eq Mixlib::Versioning.parse("11.0.0")
+ it 'correctly parses the array' do
+ subject_find.should eq Mixlib::Versioning.parse('11.0.0')
end
end # describe
- describe "filter_version argument is an instance of Mixlib::Versioning::Format" do
- let(:filter_version){ Mixlib::Versioning::Format::SemVer.new("11.0.0") }
+ describe 'filter_version argument is an instance of Mixlib::Versioning::Format' do
+ let(:filter_version) { Mixlib::Versioning::Format::SemVer.new('11.0.0') }
- it "finds the correct version" do
- subject_find.should eq Mixlib::Versioning.parse("11.0.0")
+ it 'finds the correct version' do
+ subject_find.should eq Mixlib::Versioning.parse('11.0.0')
end
end
-
end # describe
-
end # describe Mixlib::Versioning