# Copyright (c) 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.

assert(is_mac || is_ios)

config("ocmock_config") {
  include_dirs = [ "//third_party/ocmock" ]
}

config("ocmock_warnings") {
  # NSInvocation+OCMAdditions.m has some `- (void) foo; {...`
  cflags = [
    "-Wno-semicolon-before-method-body",
    "-Wno-undeclared-selector",
  ]
}

source_set("ocmock") {
  testonly = true

  sources = [
    # Helper for using with gtest.
    "gtest_support.h",
    "gtest_support.mm",

    # Some extra features to make using OCMock easier.
    "ocmock_extensions.h",
    "ocmock_extensions.mm",

    # OCMock sources.
    "OCMock/NSInvocation+OCMAdditions.h",
    "OCMock/NSInvocation+OCMAdditions.m",
    "OCMock/NSMethodSignature+OCMAdditions.h",
    "OCMock/NSMethodSignature+OCMAdditions.m",
    "OCMock/NSNotificationCenter+OCMAdditions.h",
    "OCMock/NSNotificationCenter+OCMAdditions.m",
    "OCMock/NSObject+OCMAdditions.h",
    "OCMock/NSObject+OCMAdditions.m",
    "OCMock/NSValue+OCMAdditions.h",
    "OCMock/NSValue+OCMAdditions.m",
    "OCMock/OCClassMockObject.h",
    "OCMock/OCClassMockObject.m",
    "OCMock/OCMArg.h",
    "OCMock/OCMArg.m",
    "OCMock/OCMBlockCaller.h",
    "OCMock/OCMBlockCaller.m",
    "OCMock/OCMBoxedReturnValueProvider.h",
    "OCMock/OCMBoxedReturnValueProvider.m",
    "OCMock/OCMConstraint.h",
    "OCMock/OCMConstraint.m",
    "OCMock/OCMExceptionReturnValueProvider.h",
    "OCMock/OCMExceptionReturnValueProvider.m",
    "OCMock/OCMExpectationRecorder.h",
    "OCMock/OCMExpectationRecorder.m",
    "OCMock/OCMFunctions.h",
    "OCMock/OCMFunctions.m",
    "OCMock/OCMIndirectReturnValueProvider.h",
    "OCMock/OCMIndirectReturnValueProvider.m",
    "OCMock/OCMInvocationExpectation.h",
    "OCMock/OCMInvocationExpectation.m",
    "OCMock/OCMInvocationMatcher.h",
    "OCMock/OCMInvocationMatcher.m",
    "OCMock/OCMInvocationStub.h",
    "OCMock/OCMInvocationStub.m",
    "OCMock/OCMLocation.h",
    "OCMock/OCMLocation.m",
    "OCMock/OCMMacroState.h",
    "OCMock/OCMMacroState.m",
    "OCMock/OCMNotificationPoster.h",
    "OCMock/OCMNotificationPoster.m",
    "OCMock/OCMObserverRecorder.h",
    "OCMock/OCMObserverRecorder.m",
    "OCMock/OCMPassByRefSetter.h",
    "OCMock/OCMPassByRefSetter.m",
    "OCMock/OCMRealObjectForwarder.h",
    "OCMock/OCMRealObjectForwarder.m",
    "OCMock/OCMRecorder.h",
    "OCMock/OCMRecorder.m",
    "OCMock/OCMReturnValueProvider.h",
    "OCMock/OCMReturnValueProvider.m",
    "OCMock/OCMStubRecorder.h",
    "OCMock/OCMStubRecorder.m",
    "OCMock/OCMVerifier.h",
    "OCMock/OCMVerifier.m",
    "OCMock/OCMock.h",
    "OCMock/OCMockObject.h",
    "OCMock/OCMockObject.m",
    "OCMock/OCObserverMockObject.h",
    "OCMock/OCObserverMockObject.m",
    "OCMock/OCPartialMockObject.h",
    "OCMock/OCPartialMockObject.m",
    "OCMock/OCProtocolMockObject.h",
    "OCMock/OCProtocolMockObject.m",
  ]

  deps = [
    "//testing/gtest",
  ]
  public_configs = [ ":ocmock_config" ]
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    ":ocmock_warnings",
    "//build/config/compiler:no_chromium_code",
  ]
}
