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

#import "ios/chrome/browser/ui/bubble/bubble_view.h"

#include "base/logging.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gtest_mac.h"
#include "testing/platform_test.h"

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

// Fixture to test BubbleView.
class BubbleViewTest : public PlatformTest {
 public:
  BubbleViewTest()
      : maxSize_(CGSizeMake(500.0f, 500.0f)),
        arrowDirection_(BubbleArrowDirectionUp),
        alignment_(BubbleAlignmentCenter),
        shortText_(@"I"),
        longText_(@"Lorem ipsum dolor sit amet, consectetur adipiscing elit.") {
  }

 protected:
  // The maximum size of the bubble.
  const CGSize maxSize_;
  // The direction that the bubble's arrow points.
  const BubbleArrowDirection arrowDirection_;
  // The alignment of the bubble's arrow relative to the rest of the bubble.
  const BubbleAlignment alignment_;
  // Text that is shorter than the minimum line width.
  NSString* shortText_;
  // Text that is longer than the maximum line width. It should wrap onto
  // multiple lines.
  NSString* longText_;
};

// Test |sizeThatFits| given short text.
TEST_F(BubbleViewTest, BubbleSizeShortText) {
  BubbleView* bubble = [[BubbleView alloc] initWithText:shortText_
                                         arrowDirection:arrowDirection_
                                              alignment:alignment_];
  CGSize bubbleSize = [bubble sizeThatFits:maxSize_];
  // Since the label is shorter than the minimum line width, expect the bubble
  // to be the minimum width and accommodate one line of text.
  EXPECT_NEAR(56.0f, bubbleSize.width, 1.0f);
  EXPECT_NEAR(61.5f, bubbleSize.height, 1.0f);
}

// Test |sizeThatFits| given text that should wrap onto multiple lines.
TEST_F(BubbleViewTest, BubbleSizeMultipleLineText) {
  BubbleView* bubble = [[BubbleView alloc] initWithText:longText_
                                         arrowDirection:arrowDirection_
                                              alignment:alignment_];
  CGSize bubbleSize = [bubble sizeThatFits:maxSize_];
  // The bubble should fit the label, which contains two lines of text.
  EXPECT_NEAR(349.0f, bubbleSize.width, 1.0f);
  EXPECT_NEAR(80.5f, bubbleSize.height, 1.0f);
}

// Test that the accessibility label matches the display text.
TEST_F(BubbleViewTest, Accessibility) {
  BubbleView* bubble = [[BubbleView alloc] initWithText:longText_
                                         arrowDirection:arrowDirection_
                                              alignment:alignment_];
  UIView* superview = [[UIView alloc] initWithFrame:CGRectZero];
  // Add the bubble view to the view hierarchy.
  [superview addSubview:bubble];
  EXPECT_NSEQ(longText_, bubble.accessibilityLabel);
}
