// Copyright 2016 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.

#import <XCTest/XCTest.h>

#include "components/strings/grit/components_strings.h"
#include "ios/chrome/browser/ui/tools_menu/tools_menu_constants.h"
#include "ios/chrome/grit/ios_strings.h"
#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
#import "ios/chrome/test/earl_grey/chrome_matchers.h"
#import "ios/chrome/test/earl_grey/chrome_test_case.h"
#include "ui/base/l10n/l10n_util.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

using chrome_test_util::ButtonWithAccessibilityLabel;
using chrome_test_util::ButtonWithAccessibilityLabelId;
using chrome_test_util::NavigationBarDoneButton;

@interface ClearBrowsingDataSettingsTestCase : ChromeTestCase
@end

@implementation ClearBrowsingDataSettingsTestCase

- (void)openClearBrowsingDataDialog {
  [ChromeEarlGreyUI openToolsMenu];
  [[EarlGrey
      selectElementWithMatcher:grey_accessibilityID(kToolsMenuSettingsId)]
      performAction:grey_tap()];
  NSString* settingsLabel =
      l10n_util::GetNSString(IDS_OPTIONS_ADVANCED_SECTION_TITLE_PRIVACY);
  [[EarlGrey
      selectElementWithMatcher:ButtonWithAccessibilityLabel(settingsLabel)]
      performAction:grey_tap()];

  NSString* clearBrowsingDataDialogLabel =
      l10n_util::GetNSString(IDS_IOS_CLEAR_BROWSING_DATA_TITLE);
  [[EarlGrey selectElementWithMatcher:ButtonWithAccessibilityLabel(
                                          clearBrowsingDataDialogLabel)]
      performAction:grey_tap()];
}

- (void)exitSettingsMenu {
  [[EarlGrey selectElementWithMatcher:NavigationBarDoneButton()]
      performAction:grey_tap()];
  // Wait for UI components to finish loading.
  [[GREYUIThreadExecutor sharedInstance] drainUntilIdle];
}

// Test that opening the clear browsing data dialog does not cause a crash.
- (void)testOpeningClearBrowsingData {
  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
  NSString* oldSetting =
      [defaults stringForKey:@"EnableNewClearBrowsingDataUI"];
  [defaults setObject:@"Enabled" forKey:@"EnableNewClearBrowsingDataUI"];

  [self openClearBrowsingDataDialog];
  [self exitSettingsMenu];

  [defaults setObject:oldSetting forKey:@"EnableNewClearBrowsingDataUI"];
}

@end
