itchef/cookbooks/fb_helpers/spec/version_spec.rb (74 lines of code) (raw):

# vim: syntax=ruby:expandtab:shiftwidth=2:softtabstop=2:tabstop=2 # # Copyright (c) 2020-present, Facebook, Inc. # All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require_relative '../libraries/fb_helpers' describe FB::Version do it 'parses basic version' do expect(FB::Version.new('1.3').to_a).to eq([1, 3]) end # rubocop:disable Lint/UselessComparison,Style/CaseEquality # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands context 'compares versions' do it 'less than' do expect(FB::Version.new('1.3') < FB::Version.new('1.21')).to eq(true) expect(FB::Version.new('1.3') < FB::Version.new('1.2')).to eq(false) expect(FB::Version.new('1.3') < FB::Version.new('1.3')).to eq(false) end it 'less than or equal' do expect(FB::Version.new('3.3.4') <= FB::Version.new('4.5')).to eq(true) expect(FB::Version.new('3.3.4') <= FB::Version.new('3.3.4')).to eq(true) expect(FB::Version.new('3.3.4') <= FB::Version.new('1.2')).to eq(false) end it 'greater than' do expect(FB::Version.new('3.3.10') > FB::Version.new('3.4')).to eq(false) expect(FB::Version.new('3.3.10') > FB::Version.new('3.3.10')).to eq(false) expect(FB::Version.new('3.3.10') > FB::Version.new('3.2')).to eq(true) end it 'greater than or equal' do expect(FB::Version.new('10.2') >= FB::Version.new('10.2.3')).to eq(false) expect(FB::Version.new('10.2') >= FB::Version.new('10.2')).to eq(true) expect(FB::Version.new('10.2') >= FB::Version.new('10.1.2')).to eq(true) end it 'equal' do expect(FB::Version.new('1.2.6') == FB::Version.new('1.2.7')).to eq(false) expect(FB::Version.new('1.2.6') == FB::Version.new('1.2.6')).to eq(true) expect(FB::Version.new('1.2.6') == FB::Version.new('1.2.5')).to eq(false) end it 'compare' do expect(FB::Version.new('1.2.36') <=> FB::Version.new('1.2.37')).to eq(-1) expect(FB::Version.new('1.2.36') <=> FB::Version.new('1.2.36')).to eq(0) expect(FB::Version.new('1.2.36') <=> FB::Version.new('1.2.35')).to eq(1) end it 'three equals' do expect(FB::Version.new('1.2.36') === FB::Version.new('1.2.37')). to eq(false) expect(FB::Version.new('1.2.36') === FB::Version.new('1.2.36')). to eq(true) expect(FB::Version.new('1.2.36') === FB::Version.new('1.2.35')). to eq(false) end it 'three equals loose matching' do expect(FB::Version.new('1.2.36') === FB::Version.new('1.1')).to eq(false) expect(FB::Version.new('1.2.36') === FB::Version.new('1.2')).to eq(true) expect(FB::Version.new('1.2.36') === FB::Version.new('1.4.35')). to eq(false) end end # rubocop:enable Lint/UselessComparison,Style/CaseEquality # rubocop:enable Lint/BinaryOperatorWithIdenticalOperands context 'old behavior' do context 'broken' do it 'ignores _' do # '1_2'.to_i == 12, as it's used for things like 1_000_000 expect(FB::Version.new('1_2.6') <=> FB::Version.new('1.2.7')).to eq(-1) end it 'ignores anything after -' do expect(FB::Version.new('1-2.6') <=> FB::Version.new('1-1.6')).to eq(1) expect( FB::Version.new('5.6.9-90_fbk1') <=> FB::Version.new('5.6.9-91_fbk2'), ).to eq(-1) end end context 'actually OK' do it 'ignores _' do # '1_2'.to_i == 12, as it's used for things like 1_000_000 expect(FB::Version.new('1_2.6') <=> FB::Version.new('1_2.7')).to eq(-1) expect(FB::Version.new('1_2.6') <=> FB::Version.new('1_2.5')).to eq(1) end it 'ignores anything after -' do expect(FB::Version.new('1-2.6') <=> FB::Version.new('2-1.1')).to eq(-1) end end end end