#!/usr/bin/env python
#  Copyright (c) 2016 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.

"""Run the tests with

      python rtp_analyzer_test.py
or
      python3 rtp_analyzer_test.py
"""

import collections
import unittest

MISSING_NUMPY = False  # pylint: disable=invalid-name
try:
  import numpy
  import rtp_analyzer
except ImportError:
  MISSING_NUMPY = True

FakePoint = collections.namedtuple("FakePoint",
                                   ["real_send_time_ms", "absdelay"])


class TestDelay(unittest.TestCase):
  def AssertMaskEqual(self, masked_array, data, mask):
    self.assertEqual(list(masked_array.data), data)

    if isinstance(masked_array.mask, numpy.bool_):
      array_mask = masked_array.mask
    else:
      array_mask = list(masked_array.mask)
    self.assertEqual(array_mask, mask)

  def testCalculateDelaySimple(self):
    points = [FakePoint(0, 0), FakePoint(1, 0)]
    mask = rtp_analyzer.CalculateDelay(0, 1, 1, points)
    self.AssertMaskEqual(mask, [0, 0], False)

  def testCalculateDelayMissing(self):
    points = [FakePoint(0, 0), FakePoint(2, 0)]
    mask = rtp_analyzer.CalculateDelay(0, 2, 1, points)
    self.AssertMaskEqual(mask, [0, -1, 0], [False, True, False])

  def testCalculateDelayBorders(self):
    points = [FakePoint(0, 0), FakePoint(2, 0)]
    mask = rtp_analyzer.CalculateDelay(0, 3, 2, points)
    self.AssertMaskEqual(mask, [0, 0, -1], [False, False, True])


if __name__ == "__main__":
  if MISSING_NUMPY:
    print "Missing numpy, skipping test."
  else:
    unittest.main()
