# encoding: UTF-8

# Copyright 2012 Twitter, Inc
# http://www.apache.org/licenses/LICENSE-2.0

require 'spec_helper'

describe TwitterCldr::Formatters::Numbers::Integer do
  describe "#apply" do
    context "with the ### format" do
      before(:each) do
        @token = TwitterCldr::Tokenizers::Token.new(value: "###", type: :pattern)
      end

      it "test: interpolates a number" do
        expect(described_class.new(@token).apply(123)).to eq('123')
      end

      it "test: does not include a fraction for a float" do
        expect(described_class.new(@token).apply(123.45)).to eq('123')
      end

      it "test: does not round when given a float" do
        expect(described_class.new(@token).apply(123.55)).to eq('123')
      end

      it "test: does not round with :precision => 1" do
        expect(described_class.new(@token).apply(123.55, precision: 1)).to eq('123')
      end
    end

    context "with the #,## format" do
      before(:each) do
        @token = TwitterCldr::Tokenizers::Token.new(value: "#,##", type: :pattern)
      end

      it "test: single group" do
        expect(described_class.new(@token).apply(123)).to eq('1,23')
      end

      it "test: multiple groups with a primary group size" do
        expect(described_class.new(@token).apply(123456789)).to eq('1,23,45,67,89')
      end
    end

    context "with the #,##0.## format" do
      before(:each) do
        @token = TwitterCldr::Tokenizers::Token.new(value: "#,##0.##", type: :pattern)
      end

      it "test: ignores a fraction part given in the format string" do
        expect(described_class.new(@token).apply(1234.567)).to eq('1,234')
      end

      it "test: cldr example #,##0.## => 1 234" do
        expect(described_class.new(@token).apply(1234.567)).to eq('1,234')
      end
    end

    context "miscellaneous formats" do
      it "test: interpolates a number on the right side" do
        token = TwitterCldr::Tokenizers::Token.new(value: "0###", type: :pattern)
        expect(described_class.new(token).apply(123)).to eq('0123')
      end

      it "test: strips optional digits" do
        token = TwitterCldr::Tokenizers::Token.new(value: "######", type: :pattern)
        expect(described_class.new(token).apply(123)).to eq('123')
      end

      it "test: multiple groups with a primary and secondary group size" do
        token = TwitterCldr::Tokenizers::Token.new(value: "#,##,##0", type: :pattern)
        expect(described_class.new(token).apply(123456789)).to eq('12,34,56,789')
      end

      it "test: multiple groups with a primary and secondary group size and a short string" do
        token = TwitterCldr::Tokenizers::Token.new(value: "#,##,##0", type: :pattern)
        expect(described_class.new(token).apply(123)).to eq('123')
      end

      it "test: does not group when no digits left of the grouping position" do
        token = TwitterCldr::Tokenizers::Token.new(value: "#,###", type: :pattern)
        expect(described_class.new(token).apply(123)).to eq('123')
      end

      it "test: cldr example #,##0.### => 1 234" do
        token = TwitterCldr::Tokenizers::Token.new(value: "#,##0.###", type: :pattern)
        expect(described_class.new(token, group: ' ').apply(1234.567)).to eq('1 234')
      end

      it "test: cldr example ###0.##### => 1234" do
        token = TwitterCldr::Tokenizers::Token.new(value: "###0.#####", type: :pattern)
        expect(described_class.new(token, group: ' ').apply(1234.567)).to eq('1234')
      end

      it "test: cldr example ###0.0000# => 1234" do
        token = TwitterCldr::Tokenizers::Token.new(value: "###0.0000#", type: :pattern)
        expect(described_class.new(token, group: ' ').apply(1234.567)).to eq('1234')
      end

      it "test: cldr example 00000.0000 => 01234" do
        token = TwitterCldr::Tokenizers::Token.new(value: "00000.0000", type: :pattern)
        expect(described_class.new(token, group: ' ').apply(1234.567)).to eq('01234')
      end
    end
  end
end
