Index: ios/chrome/browser/ui/util/label_observer_unittest.mm |
diff --git a/ios/chrome/browser/ui/util/label_observer_unittest.mm b/ios/chrome/browser/ui/util/label_observer_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..56119f626932782f4edc373c8b2882dd7da148e2 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/util/label_observer_unittest.mm |
@@ -0,0 +1,83 @@ |
+// Copyright 2015 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 "ios/chrome/browser/ui/util/label_observer.h" |
+ |
+#import "base/mac/scoped_nsobject.h" |
+#include "base/time/time.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/gtest_mac.h" |
+#include "testing/platform_test.h" |
+#include "url/gurl.h" |
+ |
+namespace { |
+ |
+class LabelObserverTest : public PlatformTest { |
+ protected: |
+ void SetUp() override { |
+ label_.reset([[UILabel alloc] initWithFrame:CGRectZero]); |
+ } |
+ |
+ UILabel* label() { return label_.get(); } |
+ LabelObserver* observer() { return [LabelObserver observerForLabel:label()]; } |
+ |
+ base::scoped_nsobject<UILabel> label_; |
+}; |
+ |
+// Tests that all types of LabelObserverActions are successfully called. |
+TEST_F(LabelObserverTest, SimpleTest) { |
+ __block BOOL text_action_called = NO; |
+ [observer() addTextChangedAction:^(UILabel* label) { |
+ text_action_called = YES; |
+ }]; |
+ label().text = @"text"; |
+ EXPECT_TRUE(text_action_called); |
+ __block BOOL layout_action_called = NO; |
+ [observer() addLayoutChangedAction:^(UILabel* label) { |
+ layout_action_called = YES; |
+ }]; |
+ [label() sizeToFit]; |
+ EXPECT_TRUE(layout_action_called); |
+ __block BOOL style_action_called = NO; |
+ [observer() addStyleChangedAction:^(UILabel* label) { |
+ style_action_called = YES; |
+ }]; |
+ label().textColor = [UIColor blueColor]; |
+ EXPECT_TRUE(style_action_called); |
+} |
+ |
+// Tests that a LabelObserverAction that causes another KVO callback does not |
+// get called twice |
+TEST_F(LabelObserverTest, CallCountTest) { |
+ __block NSUInteger text_action_call_count = 0; |
+ [observer() addTextChangedAction:^(UILabel* label) { |
+ ++text_action_call_count; |
+ label.text = [label.text stringByAppendingString:@"x"]; |
+ }]; |
+ label().text = @"x"; |
+ EXPECT_EQ(1U, text_action_call_count); |
+ EXPECT_NSEQ(label().text, @"xx"); |
+} |
+ |
+// Tests that LabelObserverActions are called in the same order in which they |
+// are added. |
+TEST_F(LabelObserverTest, ObserverActionOrderTest) { |
+ __block BOOL first_action_called = NO; |
+ __block BOOL second_action_called = NO; |
+ [observer() addTextChangedAction:^(UILabel* label) { |
+ EXPECT_FALSE(first_action_called); |
+ EXPECT_FALSE(second_action_called); |
+ first_action_called = YES; |
+ }]; |
+ [observer() addTextChangedAction:^(UILabel* label) { |
+ EXPECT_TRUE(first_action_called); |
+ EXPECT_FALSE(second_action_called); |
+ second_action_called = YES; |
+ }]; |
+ label().text = @"test"; |
+ EXPECT_TRUE(first_action_called); |
+ EXPECT_TRUE(second_action_called); |
+} |
+ |
+} // namespace |