# 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',
      ],
      '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/mock_datachannel.h',
        'test/mock_peerconnection.h',
        'test/mock_webrtcsession.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_java.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
}
