# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

{
  'includes': [ '../build/common.gypi', ],
  'targets': [
    {
      'target_name': 'peerconnection_unittests',
      'type': '<(gtest_target_type)',
      'dependencies': [
        '<(DEPTH)/testing/gmock.gyp:gmock',
        '<(webrtc_root)/api/api.gyp:libjingle_peerconnection',
        '<(webrtc_root)/base/base_tests.gyp:rtc_base_tests_utils',
        '<(webrtc_root)/common.gyp:webrtc_common',
        '<(webrtc_root)/media/media.gyp:rtc_unittest_main',
        '<(webrtc_root)/pc/pc.gyp:rtc_pc',
        '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default',
      ],
      'direct_dependent_settings': {
        'include_dirs': [
          '<(DEPTH)/testing/gmock/include',
        ],
      },
      'defines': [
        # Feature selection.
        'HAVE_SCTP',
      ],
      'sources': [
        'datachannel_unittest.cc',
        'dtmfsender_unittest.cc',
        'fakemetricsobserver.cc',
        'fakemetricsobserver.h',
        'jsepsessiondescription_unittest.cc',
        'localaudiosource_unittest.cc',
        'mediaconstraintsinterface_unittest.cc',
        'mediastream_unittest.cc',
        'peerconnection_unittest.cc',
        'peerconnectionendtoend_unittest.cc',
        'peerconnectionfactory_unittest.cc',
        'peerconnectioninterface_unittest.cc',
        'proxy_unittest.cc',
        'rtpsenderreceiver_unittest.cc',
        'statscollector_unittest.cc',
        'test/fakeaudiocapturemodule.cc',
        'test/fakeaudiocapturemodule.h',
        'test/fakeaudiocapturemodule_unittest.cc',
        'test/fakeconstraints.h',
        'test/fakedatachannelprovider.h',
        'test/fakeperiodicvideocapturer.h',
        'test/fakertccertificategenerator.h',
        'test/fakevideotrackrenderer.h',
        'test/mockpeerconnectionobservers.h',
        'test/peerconnectiontestwrapper.h',
        'test/peerconnectiontestwrapper.cc',
        'test/testsdpstrings.h',
        'videocapturertracksource_unittest.cc',
        'videotrack_unittest.cc',
        'webrtcsdp_unittest.cc',
        'webrtcsession_unittest.cc',
      ],
      # TODO(kjellander): Make the code compile without disabling these flags.
      # See https://bugs.chromium.org/p/webrtc/issues/detail?id=3307
      'cflags': [
        '-Wno-sign-compare',
      ],
      'cflags!': [
        '-Wextra',
      ],
      'cflags_cc!': [
        '-Woverloaded-virtual',
      ],
      'msvs_disabled_warnings': [
        4245,  # conversion from 'int' to 'size_t', signed/unsigned mismatch.
        4267,  # conversion from 'size_t' to 'int', possible loss of data.
        4389,  # signed/unsigned mismatch.
      ],
      'conditions': [
        ['clang==1', {
          # TODO(kjellander): Make the code compile without disabling these flags.
          # See https://bugs.chromium.org/p/webrtc/issues/detail?id=3307
          'cflags!': [
            '-Wextra',
          ],
          'xcode_settings': {
            'WARNING_CFLAGS!': ['-Wextra'],
          },
        }],
        ['OS=="android"', {
          'sources': [
            'test/androidtestinitializer.cc',
            'test/androidtestinitializer.h',
          ],
          'dependencies': [
            '<(DEPTH)/testing/android/native_test.gyp:native_test_native_code',
            '<(webrtc_root)/api/api.gyp:libjingle_peerconnection_jni',
          ],
        }],
        ['OS=="win" and clang==1', {
          'msvs_settings': {
            'VCCLCompilerTool': {
              'AdditionalOptions': [
                # Disable warnings failing when compiling with Clang on Windows.
                # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366
                '-Wno-sign-compare',
                '-Wno-unused-function',
              ],
            },
          },
        }],
        ['use_quic==1', {
          'dependencies': [
            '<(DEPTH)/third_party/libquic/libquic.gyp:libquic',
          ],
          'sources': [
            'quicdatachannel_unittest.cc',
            'quicdatatransport_unittest.cc',
          ],
          'export_dependent_settings': [
            '<(DEPTH)/third_party/libquic/libquic.gyp:libquic',
          ],
        }],
      ],  # conditions
    },  # target peerconnection_unittests
  ],  # targets
  'conditions': [
    ['OS=="android"', {
      'targets': [
        {
          'target_name': 'libjingle_peerconnection_android_unittest',
          'type': 'none',
          'dependencies': [
            '<(webrtc_root)/api/api.gyp:libjingle_peerconnection_java',
          ],
          'variables': {
            'apk_name': 'libjingle_peerconnection_android_unittest',
            'java_in_dir': 'androidtests',
            'resource_dir': 'androidtests/res',
            'native_lib_target': 'libjingle_peerconnection_so',
            'is_test_apk': 1,
            'test_type': 'instrumentation',
            'tested_apk_path': '',
            'never_lint': 1,
          },
          'includes': [
            '../../build/java_apk.gypi',
            '../../build/android/test_runner.gypi',
          ],
        },
      ],  # targets
    }],  # OS=="android"
    ['OS=="android"', {
      'targets': [
        {
          'target_name': 'peerconnection_unittests_apk_target',
          'type': 'none',
          'dependencies': [
            '<(android_tests_path):peerconnection_unittests_apk',
          ],
        },
      ],
      'conditions': [
        ['test_isolation_mode != "noop"',
          {
            'targets': [
              {
                'target_name': 'peerconnection_unittests_apk_run',
                'type': 'none',
                'dependencies': [
                  '<(android_tests_path):peerconnection_unittests_apk',
                ],
                'includes': [
                  '../build/isolate.gypi',
                ],
                'sources': [
                  'peerconnection_unittests_apk.isolate',
                ],
              },
            ]
          }
        ],
      ],
    }],  # OS=="android"
    ['test_isolation_mode != "noop"', {
      'targets': [
        {
          'target_name': 'peerconnection_unittests_run',
          'type': 'none',
          'dependencies': [
            'peerconnection_unittests',
          ],
          'includes': [
            '../build/isolate.gypi',
          ],
          'sources': [
            'peerconnection_unittests.isolate',
          ],
        },
      ],  # targets
    }],  # test_isolation_mode != "noop"
  ],  # conditions
}
