// 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());
}
}
}
}