// Copyright (c) 2012 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 "remoting/base/resources.h"

#include "remoting/base/string_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace remoting {

class ResourcesTest : public testing::Test {
 protected:
  ResourcesTest(): resources_available_(false) {
  }

  virtual void SetUp() OVERRIDE {
    resources_available_ = LoadResources("en-US");
  }

  virtual void TearDown() OVERRIDE {
    UnloadResources();
  }

  bool resources_available_;
};

// TODO(alexeypa): Reenable the test once http://crbug.com/269143 is fixed.
#if !defined(OS_CHROMEOS)
#define MAYBE_ProductName ProductName
#else
#define MAYBE_ProductName DISABLED_ProductName
#endif

TEST_F(ResourcesTest, MAYBE_ProductName) {
#if defined(GOOGLE_CHROME_BUILD)
  std::string expected_product_name = "Chrome Remote Desktop";
#else  // defined(GOOGLE_CHROME_BUILD)
  std::string expected_product_name = "Chromoting";
#endif  // !defined(GOOGLE_CHROME_BUILD)

  // Chrome-style i18n is not used on Windows.
#if defined(OS_WIN)
  EXPECT_FALSE(resources_available_);
#else
  EXPECT_TRUE(resources_available_);
#endif

  if (resources_available_) {
    EXPECT_EQ(expected_product_name,
              l10n_util::GetStringUTF8(IDR_PRODUCT_NAME));
  }
}

}  // namespace remoting
