ocmock_complex_type_helper_unittest.mm 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #import "ios/testing/ocmock_complex_type_helper.h"
  5. #include "testing/platform_test.h"
  6. #import "third_party/ocmock/OCMock/OCMock.h"
  7. #include "third_party/ocmock/gtest_support.h"
  8. #if !defined(__has_feature) || !__has_feature(objc_arc)
  9. #error "This file requires ARC support."
  10. #endif
  11. // A complex type to test with..
  12. struct SampleComplexType {
  13. int number;
  14. float blob;
  15. };
  16. typedef int ScalarType;
  17. @protocol TestedProtocol
  18. - (void)passObject:(id)foo;
  19. - (void)passComplexType:(const SampleComplexType&)foo;
  20. - (void)passScalar:(ScalarType)foo;
  21. @end
  22. @interface MockClass : OCMockComplexTypeHelper
  23. @end
  24. @implementation MockClass
  25. typedef void (^complexTypeBlock)(const SampleComplexType&);
  26. - (void)passComplexType:(const SampleComplexType&)foo {
  27. return static_cast<complexTypeBlock>([self blockForSelector:_cmd])(foo);
  28. }
  29. typedef void (^ScalarBlock)(const ScalarType&);
  30. - (void)passScalar:(ScalarType)foo {
  31. return static_cast<ScalarBlock>([self blockForSelector:_cmd])(foo);
  32. }
  33. @end
  34. namespace {
  35. class OCMockComplexTypeHelperTest : public PlatformTest {
  36. protected:
  37. void SetUp() override {
  38. PlatformTest::SetUp();
  39. OCMockObject* protocol_mock =
  40. [OCMockObject mockForProtocol:@protocol(TestedProtocol)];
  41. helped_mock_ = [[MockClass alloc] initWithRepresentedObject:protocol_mock];
  42. }
  43. void TearDown() override {
  44. EXPECT_OCMOCK_VERIFY(helped_mock_);
  45. PlatformTest::TearDown();
  46. }
  47. id helped_mock_;
  48. };
  49. TEST_F(OCMockComplexTypeHelperTest, nilObjectStillWorks) {
  50. [[helped_mock_ expect] passObject:nil];
  51. [helped_mock_ passObject:nil];
  52. }
  53. TEST_F(OCMockComplexTypeHelperTest, anyObjectStillWorks) {
  54. id someObject = [[NSObject alloc] init];
  55. [[helped_mock_ expect] passObject:OCMOCK_ANY];
  56. [helped_mock_ passObject:someObject];
  57. }
  58. TEST_F(OCMockComplexTypeHelperTest, complexType) {
  59. const SampleComplexType expected_value = {1, 1.0};
  60. complexTypeBlock block = ^(const SampleComplexType& value) {
  61. EXPECT_EQ(expected_value.number, value.number);
  62. EXPECT_EQ(expected_value.blob, value.blob);
  63. };
  64. [helped_mock_ onSelector:@selector(passComplexType:)
  65. callBlockExpectation:(id)block];
  66. [helped_mock_ passComplexType:expected_value];
  67. }
  68. TEST_F(OCMockComplexTypeHelperTest, scalarType) {
  69. const ScalarType expected_value = 42;
  70. ScalarBlock block = ^(const ScalarType& value) {
  71. EXPECT_EQ(expected_value, value);
  72. };
  73. [helped_mock_ onSelector:@selector(passScalar:)
  74. callBlockExpectation:(id)block];
  75. [helped_mock_ passScalar:expected_value];
  76. }
  77. } // namespace