// Copyright 2017 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/browser/android/preferences/prefs.h"

#include "base/stl_util.h"
#include "chrome/browser/android/preferences/pref_service_bridge.h"
#include "chrome/common/pref_names.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {

class PrefsTest : public ::testing::Test {
 protected:
  const char* GetPrefName(Pref pref) {
    pref_count_++;
    return PrefServiceBridge::GetPrefNameExposedToJava(pref);
  }

  int pref_count_;
};

TEST_F(PrefsTest, TestIndex) {
  pref_count_ = 0;

  // If one of these checks fails, most likely the Pref enum and
  // |kPrefExposedToJava| are out of sync.
  EXPECT_EQ(Pref::PREF_NUM_PREFS, base::size(kPrefsExposedToJava));

  EXPECT_EQ(prefs::kAllowDeletingBrowserHistory,
            GetPrefName(ALLOW_DELETING_BROWSER_HISTORY));
  EXPECT_EQ(contextual_suggestions::prefs::kContextualSuggestionsEnabled,
            GetPrefName(CONTEXTUAL_SUGGESTIONS_ENABLED));
  EXPECT_EQ(prefs::kIncognitoModeAvailability,
            GetPrefName(INCOGNITO_MODE_AVAILABILITY));

#if BUILDFLAG(ENABLE_FEED_IN_CHROME)
  EXPECT_EQ(feed::prefs::kEnableSnippets,
            GetPrefName(NTP_ARTICLES_SECTION_ENABLED));
  EXPECT_EQ(feed::prefs::kArticlesListVisible,
            GetPrefName(NTP_ARTICLES_LIST_VISIBLE));
#else   // BUILDFLAG(ENABLE_FEED_IN_CHROME)
  EXPECT_EQ(ntp_snippets::prefs::kEnableSnippets,
            GetPrefName(NTP_ARTICLES_SECTION_ENABLED));
  EXPECT_EQ(ntp_snippets::prefs::kArticlesListVisible,
            GetPrefName(NTP_ARTICLES_LIST_VISIBLE));
#endif  // BUILDFLAG(ENABLE_FEED_IN_CHROME)

  EXPECT_EQ(prefs::kPromptForDownloadAndroid,
            GetPrefName(PROMPT_FOR_DOWNLOAD_ANDROID));
  EXPECT_EQ(dom_distiller::prefs::kReaderForAccessibility,
            GetPrefName(READER_FOR_ACCESSIBILITY_ENABLED));
  EXPECT_EQ(prefs::kShowMissingSdCardErrorAndroid,
            GetPrefName(SHOW_MISSING_SD_CARD_ERROR_ANDROID));
  EXPECT_EQ(payments::kCanMakePaymentEnabled,
            GetPrefName(CAN_MAKE_PAYMENT_ENABLED));
  EXPECT_EQ(prefs::kContextualSearchEnabled,
            GetPrefName(CONTEXTUAL_SEARCH_ENABLED));
  EXPECT_EQ(autofill::prefs::kAutofillProfileEnabled,
            GetPrefName(AUTOFILL_PROFILE_ENABLED));
  EXPECT_EQ(autofill::prefs::kAutofillCreditCardEnabled,
            GetPrefName(AUTOFILL_CREDIT_CARD_ENABLED));

  // If this check fails, a pref is missing a test case above.
  EXPECT_EQ(Pref::PREF_NUM_PREFS, pref_count_);
}

}  // namespace
