// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/renderer/web_apps.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" // Tests ParseIconSizes with various input. TEST(WebAppInfo, ParseIconSizes) { struct TestData { const char* input; const bool expected_result; const bool is_any; const size_t expected_size_count; const int width1; const int height1; const int width2; const int height2; } data[] = { // Bogus input cases. { "10", false, false, 0, 0, 0, 0, 0 }, { "10 10", false, false, 0, 0, 0, 0, 0 }, { "010", false, false, 0, 0, 0, 0, 0 }, { " 010 ", false, false, 0, 0, 0, 0, 0 }, { " 10x ", false, false, 0, 0, 0, 0, 0 }, { " x10 ", false, false, 0, 0, 0, 0, 0 }, { "any 10x10", false, false, 0, 0, 0, 0, 0 }, { "", false, false, 0, 0, 0, 0, 0 }, { "10ax11", false, false, 0, 0, 0, 0, 0 }, // Any. { "any", true, true, 0, 0, 0, 0, 0 }, { " any", true, true, 0, 0, 0, 0, 0 }, { " any ", true, true, 0, 0, 0, 0, 0 }, // Sizes. { "10x11", true, false, 1, 10, 11, 0, 0 }, { " 10x11 ", true, false, 1, 10, 11, 0, 0 }, { " 10x11 1x2", true, false, 2, 10, 11, 1, 2 }, }; for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { bool is_any; std::vector<gfx::Size> sizes; bool result = web_apps::ParseIconSizes( base::ASCIIToUTF16(data[i].input), &sizes, &is_any); ASSERT_EQ(result, data[i].expected_result); if (result) { ASSERT_EQ(data[i].is_any, is_any); ASSERT_EQ(data[i].expected_size_count, sizes.size()); if (!sizes.empty()) { ASSERT_EQ(data[i].width1, sizes[0].width()); ASSERT_EQ(data[i].height1, sizes[0].height()); } if (sizes.size() > 1) { ASSERT_EQ(data[i].width2, sizes[1].width()); ASSERT_EQ(data[i].height2, sizes[1].height()); } } } }