DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (5b81998bb7ab)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
import unittest

import os, sys, os.path, time
from tempfile import mkdtemp
from shutil import rmtree
import mozunit

from buildlist import addEntriesToListFile

class TestBuildList(unittest.TestCase):
  """
  Unit tests for buildlist.py
  """
  def setUp(self):
    self.tmpdir = mkdtemp()

  def tearDown(self):
    rmtree(self.tmpdir)

  # utility methods for tests
  def touch(self, file, dir=None):
    if dir is None:
      dir = self.tmpdir
    f = os.path.join(dir, file)
    open(f, 'w').close()
    return f

  def assertFileContains(self, filename, l):
    """Assert that the lines in the file |filename| are equal
    to the contents of the list |l|, in order."""
    l = l[:]
    f = open(filename, 'r')
    lines = [line.rstrip() for line in f.readlines()]
    f.close()
    for line in lines:
      self.assert_(len(l) > 0,
                   "ran out of expected lines! (expected '{0}', got '{1}')"
                   .format(l, lines))
      self.assertEqual(line, l.pop(0))
    self.assert_(len(l) == 0, 
                 "not enough lines in file! (expected '{0}',"
                 " got '{1}'".format(l, lines))

  def test_basic(self):
    "Test that addEntriesToListFile works when file doesn't exist."
    testfile = os.path.join(self.tmpdir, "test.list")
    l = ["a", "b", "c"]
    addEntriesToListFile(testfile, l)
    self.assertFileContains(testfile, l)
    # ensure that attempting to add the same entries again doesn't change it
    addEntriesToListFile(testfile, l)
    self.assertFileContains(testfile, l)

  def test_append(self):
    "Test adding new entries."
    testfile = os.path.join(self.tmpdir, "test.list")
    l = ["a", "b", "c"]
    addEntriesToListFile(testfile, l)
    self.assertFileContains(testfile, l)
    l2 = ["x","y","z"]
    addEntriesToListFile(testfile, l2)
    l.extend(l2)
    self.assertFileContains(testfile, l)

  def test_append_some(self):
    "Test adding new entries mixed with existing entries."
    testfile = os.path.join(self.tmpdir, "test.list")
    l = ["a", "b", "c"]
    addEntriesToListFile(testfile, l)
    self.assertFileContains(testfile, l)
    addEntriesToListFile(testfile, ["a", "x", "c", "z"])
    self.assertFileContains(testfile, ["a", "b", "c", "x", "z"])

  def test_add_multiple(self):
    """Test that attempting to add the same entry multiple times results in
    only one entry being added."""
    testfile = os.path.join(self.tmpdir, "test.list")
    addEntriesToListFile(testfile, ["a","b","a","a","b"])
    self.assertFileContains(testfile, ["a","b"])
    addEntriesToListFile(testfile, ["c","a","c","b","c"])
    self.assertFileContains(testfile, ["a","b","c"])

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