require File.expand_path(File.dirname(__FILE__) + '/helper') require File.expand_path(File.dirname(__FILE__) + '/fixtures/markup_app/app') describe "NumberHelpers" do include Padrino::Helpers::NumberHelpers def kilobytes(number) number * 1024 end def megabytes(number) kilobytes(number) * 1024 end def gigabytes(number) megabytes(number) * 1024 end def terabytes(number) gigabytes(number) * 1024 end context 'for number helpers functionality' do should 'display number_to_currency' do assert_equal "$1,234,567,890.50", number_to_currency(1234567890.50) assert_equal "$1,234,567,890.51", number_to_currency(1234567890.506) assert_equal "$1,234,567,892", number_to_currency(1234567891.50, {:precision => 0}) assert_equal "$1,234,567,890.5", number_to_currency(1234567890.50, {:precision => 1}) assert_equal "£1234567890,50", number_to_currency(1234567890.50, {:unit => "£", :separator => ",", :delimiter => ""}) assert_equal "$1,234,567,890.50", number_to_currency("1234567890.50") assert_equal "1,234,567,890.50 Kč", number_to_currency("1234567890.50", {:unit => "Kč", :format => "%n %u"}) assert_equal "$x", number_to_currency("x") assert_nil number_to_currency(nil) end should 'display number_to_percentage' do assert_equal "100.000%", number_to_percentage(100) assert_equal "100%", number_to_percentage(100, {:precision => 0}) assert_equal "302.06%", number_to_percentage(302.0574, {:precision => 2}) assert_equal "100.000%", number_to_percentage("100") assert_equal "1000.000%", number_to_percentage("1000") assert_equal "x%", number_to_percentage("x") assert_equal "1.000,000%", number_to_percentage(1000, :delimiter => '.', :separator => ',') assert_nil number_to_percentage(nil) end should 'display number_with_delimiter' do assert_equal "12,345,678", number_with_delimiter(12345678) assert_equal "0", number_with_delimiter(0) assert_equal "123", number_with_delimiter(123) assert_equal "123,456", number_with_delimiter(123456) assert_equal "123,456.78", number_with_delimiter(123456.78) assert_equal "123,456.789", number_with_delimiter(123456.789) assert_equal "123,456.78901", number_with_delimiter(123456.78901) assert_equal "123,456,789.78901", number_with_delimiter(123456789.78901) assert_equal "0.78901", number_with_delimiter(0.78901) assert_equal "123,456.78", number_with_delimiter("123456.78") assert_equal "x", number_with_delimiter("x") assert_nil number_with_delimiter(nil) end should 'display number_with_delimiter with options' do assert_equal '12 345 678', number_with_delimiter(12345678, :delimiter => ' ') assert_equal '12,345,678-05', number_with_delimiter(12345678.05, :separator => '-') assert_equal '12.345.678,05', number_with_delimiter(12345678.05, :separator => ',', :delimiter => '.') assert_equal '12.345.678,05', number_with_delimiter(12345678.05, :delimiter => '.', :separator => ',') end should 'display number_with_precision' do assert_equal "111.235", number_with_precision(111.2346) assert_equal "31.83", number_with_precision(31.825, :precision => 2) assert_equal "111.23", number_with_precision(111.2346, :precision => 2) assert_equal "111.00", number_with_precision(111, :precision => 2) assert_equal "111.235", number_with_precision("111.2346") assert_equal "31.83", number_with_precision("31.825", :precision => 2) assert_equal "3268", number_with_precision((32.6751 * 100.00), :precision => 0) assert_equal "112", number_with_precision(111.50, :precision => 0) assert_equal "1234567892", number_with_precision(1234567891.50, :precision => 0) # Return non-numeric params unchanged. assert_equal "x", number_with_precision("x") assert_nil number_with_precision(nil) end should 'display number_with_precision with custom delimiter and separator' do assert_equal '31,83', number_with_precision(31.825, :precision => 2, :separator => ',') assert_equal '1.231,83', number_with_precision(1231.825, :precision => 2, :separator => ',', :delimiter => '.') end should 'display number_to_human_size' do assert_equal '0 Bytes', number_to_human_size(0) assert_equal '1 Byte', number_to_human_size(1) assert_equal '3 Bytes', number_to_human_size(3.14159265) assert_equal '123 Bytes', number_to_human_size(123.0) assert_equal '123 Bytes', number_to_human_size(123) assert_equal '1.2 KB', number_to_human_size(1234) assert_equal '12.1 KB', number_to_human_size(12345) assert_equal '1.2 MB', number_to_human_size(1234567) assert_equal '1.1 GB', number_to_human_size(1234567890) assert_equal '1.1 TB', number_to_human_size(1234567890123) assert_equal '1025 TB', number_to_human_size(terabytes(1025)) assert_equal '444 KB', number_to_human_size(kilobytes(444)) assert_equal '1023 MB', number_to_human_size(megabytes(1023)) assert_equal '3 TB', number_to_human_size(terabytes(3)) assert_equal '1.18 MB', number_to_human_size(1234567, :precision => 2) assert_equal '3 Bytes', number_to_human_size(3.14159265, :precision => 4) assert_equal '123 Bytes', number_to_human_size("123") assert_equal '1.01 KB', number_to_human_size(kilobytes(1.0123), :precision => 2) assert_equal '1.01 KB', number_to_human_size(kilobytes(1.0100), :precision => 4) assert_equal '10 KB', number_to_human_size(kilobytes(10.000), :precision => 4) assert_equal '1 Byte', number_to_human_size(1.1) assert_equal '10 Bytes', number_to_human_size(10) assert_nil number_to_human_size(nil) end should 'display number_to_human_size with options' do assert_equal '1.18 MB', number_to_human_size(1234567, :precision => 2) assert_equal '3 Bytes', number_to_human_size(3.14159265, :precision => 4) assert_equal '1.01 KB', number_to_human_size(kilobytes(1.0123), :precision => 2) assert_equal '1.01 KB', number_to_human_size(kilobytes(1.0100), :precision => 4) assert_equal '10 KB', number_to_human_size(kilobytes(10.000), :precision => 4) assert_equal '1 TB', number_to_human_size(1234567890123, :precision => 0) assert_equal '500 MB', number_to_human_size(524288000, :precision => 0) assert_equal '40 KB', number_to_human_size(41010, :precision => 0) assert_equal '40 KB', number_to_human_size(41100, :precision => 0) end should 'display number_to_human_size with custom delimiter and separator' do assert_equal '1,01 KB', number_to_human_size(kilobytes(1.0123), :precision => 2, :separator => ',') assert_equal '1,01 KB', number_to_human_size(kilobytes(1.0100), :precision => 4, :separator => ',') assert_equal '1.000,1 TB', number_to_human_size(terabytes(1000.1), :delimiter => '.', :separator => ',') end end end