spec/formatters/numbers/currency_formatter_spec.rb (41 lines of code) (raw):
# encoding: UTF-8
# Copyright 2012 Twitter, Inc
# http://www.apache.org/licenses/LICENSE-2.0
require 'spec_helper'
describe TwitterCldr::Formatters::CurrencyFormatter do
describe "#format" do
let(:data_reader) { TwitterCldr::DataReaders::NumberDataReader.new(:msa, type: :currency) }
let(:tokenizer) { data_reader.tokenizer }
let(:formatter) { data_reader.formatter }
def format_currency(number, options = {})
tokens = tokenizer.tokenize(data_reader.pattern(number))
formatter.format(tokens, number, options)
end
it "should use a dollar sign when no other currency symbol is given (and default to a precision of 2)" do
expect(format_currency(12)).to eq("$12.00")
end
it "handles negative numbers" do
# yes, the parentheses really are part of the format, don't worry about it
expect(format_currency(-12)).to eq("-$12.00")
end
it "should use the specified currency symbol when specified" do
# S/. is the symbol for the Peruvian Nuevo Sol, just in case you were curious
expect(format_currency(12, symbol: "S/.")).to eq("S/.12.00")
end
it "should use the currency code as the symbol if the currency code can't be identified" do
expect(format_currency(12, currency: "XYZ")).to eq("XYZ12.00")
end
it "should respect the :use_cldr_symbol option" do
expect(format_currency(12, currency: "CAD")).to eq("$12.00")
expect(format_currency(12, currency: "CAD", use_cldr_symbol: true)).to eq("CA$12.00")
end
it "should use the currency symbol for the corresponding currency code" do
expect(format_currency(12, currency: "THB")).to eq("฿12.00")
end
it "overrides the default precision" do
expect(format_currency(12, precision: 3)).to eq("$12.000")
end
it "should use the currency-specific default precision" do
expect(format_currency(12, currency: "TND")).to eq("TND12.000")
end
it "should use the currency rounding for the currency code" do
# The rounding value for CHF changed from 5 to 0 in CLDR 23, so we have to pass
# :rounding explicitly to test its effects.
expect(format_currency(12.03, currency: "CHF", rounding: 5)).to eq("CHF12.05")
expect(format_currency(12.02, currency: "CHF", rounding: 5)).to eq("CHF12.00")
end
end
end