# frozen_string_literal: true

require 'spec_helper'
require 'image_optim/bin_resolver/simple_version'

describe ImageOptim::BinResolver::SimpleVersion do
  def v(str)
    described_class.new(str)
  end

  describe '#initialize' do
    describe 'conversion' do
      it 'converts Integer' do
        expect(v(117)).to eq('117')
      end

      it 'converts Float' do
        expect(v(1.17)).to eq('1.17')
      end

      it 'converts String' do
        expect(v('1.17')).to eq('1.17')
      end

      it 'converts self' do
        expect(v(v(1.17))).to eq('1.17')
      end
    end

    describe 'normalization' do
      %w[
        1
        01
        1.0
        1.00
        1.0.0
        1.0.0.0
      ].each do |variation|
        it "normalizes #{variation}" do
          expect(v(variation)).to eq(1)
        end
      end
    end
  end

  describe '#to_s' do
    it 'returns the original value converted to String' do
      expect(v(117).to_s).to eq('117')
      expect(v(1.17).to_s).to eq('1.17')
      expect(v('0117').to_s).to eq('0117')
    end
  end

  describe '#<=>' do
    describe 'comparing version 1.17' do
      subject{ v '1.17' }

      it{ is_expected.to be > '0' }
      it{ is_expected.to be > '0.1' }
      it{ is_expected.to be > '0.9' }
      it{ is_expected.to be > '1.9' }
      it{ is_expected.to be < '1.17.1' }
      it{ is_expected.to be < '1.99' }
      it{ is_expected.to be < '2.1' }
    end
  end
end
