#!/usr/bin/python
#
# Copyright 2014 Google Inc. All Rights Reserved.

import test_flag

import unittest


class FlagTestCase(unittest.TestCase):

  def test_test_flag(self):
    # Verify that test_flag._is_test exists, that it is a list,
    # and that it contains 1 element.
    self.assertTrue(type(test_flag._is_test) is list)
    self.assertEqual(len(test_flag._is_test), 1)

    # Verify that the getting the flag works and that the flag
    # contains False, its starting value.
    save_flag = test_flag.GetTestMode()
    self.assertFalse(save_flag)

    # Verify that setting the flat to True, then getting it, works.
    test_flag.SetTestMode(True)
    self.assertTrue(test_flag.GetTestMode())

    # Verify that setting the flag to False, then getting it, works.
    test_flag.SetTestMode(save_flag)
    self.assertFalse(test_flag.GetTestMode())

    # Verify that test_flag._is_test still exists, that it still is a
    # list, and that it still contains 1 element.
    self.assertTrue(type(test_flag._is_test) is list)
    self.assertEqual(len(test_flag._is_test), 1)


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