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

import collections
import compact_blocklist as cb
import unittest


class CompactBlocklistTest(unittest.TestCase):
  def TestValidUUID(self):
    self.assertTrue( cb.ValidUUID('00000000-0000-0000-0000-000000000000'))
    self.assertTrue( cb.ValidUUID('01234567-89ab-cdef-0123-456789abcdef'))
    self.assertTrue( cb.ValidUUID('00001812-0000-1000-8000-00805f9b34fb'))
    self.assertFalse(cb.ValidUUID('g1234567-89ab-cdef-0123-456789abcdef'))
    self.assertFalse(cb.ValidUUID('01234567-89ab-cdef-0123-456789abcdef0'))
    self.assertFalse(cb.ValidUUID('0123456789abcdef0123456789abcdef'))
    self.assertFalse(cb.ValidUUID('01234567089ab0cdef001230456789abcdef'))

  def TestShortenUUID(self):
    self.assertEqual(cb.ShortenUUID(
      '00000000-0000-0000-0000-000000000000'),
      '00000000-0000-0000-0000-000000000000')
    self.assertEqual(cb.ShortenUUID(
      '01234567-89ab-cdef-0123-456789abcdef'),
      '01234567-89ab-cdef-0123-456789abcdef')
    self.assertEqual(cb.ShortenUUID(
      '00001812-0000-1000-8000-00805f9b34fb'),
      '1812')
    self.assertEqual(cb.ShortenUUID(
      'g1234567-89ab-cdef-0123-456789abcdef'),
      'g1234567-89ab-cdef-0123-456789abcdef')
    self.assertEqual(cb.ShortenUUID(
      '01234567-89ab-cdef-0123-456789abcdef0'),
      '01234567-89ab-cdef-0123-456789abcdef0')
    self.assertEqual(cb.ShortenUUID(
      '0123456789abcdef0123456789abcdef'),
      '0123456789abcdef0123456789abcdef')
    self.assertEqual(cb.ShortenUUID(
      '01234567089ab0cdef001230456789abcdef'),
      '01234567089ab0cdef001230456789abcdef')

  def TestProcess(self):
    blocklist = collections.OrderedDict()
    try:
      cb.Process('# comment', blocklist)
      cb.Process('', blocklist)
    except Exception:
      self.fail('Failed test for comment or blank line.')

    self.assertRaises(cb.BadLineException, cb.Process,
      '00001812-0000-1000-8000-00805f9b34fb exclude-write exclude', blocklist)
    self.assertRaises(cb.InvalidExclusionException, cb.Process,
      '00001812-0000-1000-8000-00805f9b34fb exclude-write', blocklist)
    self.assertRaises(cb.InvalidExclusionException, cb.Process,
      '00001812-0000-1000-8000-00805f9b34fb exclude', blocklist)

    try:
      cb.Process('00001812-0000-1000-8000-00805f9b34fa exclude-writes',
        blocklist)
      cb.Process('00001812-0000-1000-8000-00805f9b34fb exclude-reads',
        blocklist)
      cb.Process('00001812-0000-1000-8000-00805f9b34fc', blocklist)
    except Exception:
      self.fail('Failed test for valid lines.')

    self.assertRaises(cb.DuplicateUUIDException, cb.Process,
      '00001812-0000-1000-8000-00805f9b34fa exclude-writes', blocklist)


if __name__ == '__main__':
  unittest.main()
