bytes_formatting_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/text/bytes_formatting.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BytesFormattingTest, GetByteDisplayUnits) { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const struct { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 bytes; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataUnits expected; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {0, DATA_UNITS_BYTE}, 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {512, DATA_UNITS_BYTE}, 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {10*1024, DATA_UNITS_KIBIBYTE}, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {10*1024*1024, DATA_UNITS_MEBIBYTE}, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {10LL*1024*1024*1024, DATA_UNITS_GIBIBYTE}, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {10LL*1024*1024*1024*1024, DATA_UNITS_TEBIBYTE}, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {~(1LL<<63), DATA_UNITS_PEBIBYTE}, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {-1, DATA_UNITS_BYTE}, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(cases[i].expected, GetByteDisplayUnits(cases[i].bytes)); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BytesFormattingTest, FormatBytes) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const struct { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 bytes; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DataUnits units; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected_with_units; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } cases[] = { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected behavior: we show one post-decimal digit when we have 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // under two pre-decimal digits, except in cases where it makes no 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sense (zero or bytes). 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Since we switch units once we cross the 1000 mark, this keeps 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the display of file sizes or bytes consistently around three 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // digits. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {0, DATA_UNITS_BYTE, "0", "0 B"}, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {512, DATA_UNITS_BYTE, "512", "512 B"}, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {512, DATA_UNITS_KIBIBYTE, "0.5", "0.5 KB"}, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {1024*1024, DATA_UNITS_KIBIBYTE, "1,024", "1,024 KB"}, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {1024*1024, DATA_UNITS_MEBIBYTE, "1.0", "1.0 MB"}, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {1024*1024*1024, DATA_UNITS_GIBIBYTE, "1.0", "1.0 GB"}, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {10LL*1024*1024*1024, DATA_UNITS_GIBIBYTE, "10.0", "10.0 GB"}, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {99LL*1024*1024*1024, DATA_UNITS_GIBIBYTE, "99.0", "99.0 GB"}, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {105LL*1024*1024*1024, DATA_UNITS_GIBIBYTE, "105", "105 GB"}, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {105LL*1024*1024*1024 + 500LL*1024*1024, DATA_UNITS_GIBIBYTE, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "105", "105 GB"}, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {~(1LL<<63), DATA_UNITS_GIBIBYTE, "8,589,934,592", "8,589,934,592 GB"}, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {~(1LL<<63), DATA_UNITS_PEBIBYTE, "8,192", "8,192 PB"}, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {99*1024 + 103, DATA_UNITS_KIBIBYTE, "99.1", "99.1 KB"}, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {1024*1024 + 103, DATA_UNITS_KIBIBYTE, "1,024", "1,024 KB"}, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {1024*1024 + 205 * 1024, DATA_UNITS_MEBIBYTE, "1.2", "1.2 MB"}, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {1024*1024*1024 + (927 * 1024*1024), DATA_UNITS_GIBIBYTE, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "1.9", "1.9 GB"}, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {10LL*1024*1024*1024, DATA_UNITS_GIBIBYTE, "10.0", "10.0 GB"}, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {100LL*1024*1024*1024, DATA_UNITS_GIBIBYTE, "100", "100 GB"}, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {-1, DATA_UNITS_BYTE, "", ""}, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].expected), 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormatBytesWithUnits(cases[i].bytes, cases[i].units, false)); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16(cases[i].expected_with_units), 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormatBytesWithUnits(cases[i].bytes, cases[i].units, true)); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui 80