• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2#
3# Copyright (C) 2008 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#      http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17import os
18import tempfile
19import unittest
20
21import inner_tree
22import utils
23
24
25class TestInnerTreeKey(unittest.TestCase):
26    def test_eq(self):
27        k1 = inner_tree.InnerTreeKey('inner', 'product')
28        k2 = inner_tree.InnerTreeKey('inner', 'product')
29        self.assertEqual(k1, k2)
30        self.assertGreaterEqual(k1, k2)
31        self.assertLessEqual(k1, k2)
32        self.assertEqual(hash(k1), hash(k2))
33
34        k1 = inner_tree.InnerTreeKey(['inner', 'o1'], 'product')
35        k2 = inner_tree.InnerTreeKey(['inner', 'o1'], 'product')
36        self.assertEqual(k1, k2)
37        self.assertGreaterEqual(k1, k2)
38        self.assertLessEqual(k1, k2)
39        self.assertEqual(hash(k1), hash(k2))
40
41    def test_neq(self):
42        k1 = inner_tree.InnerTreeKey('inner1', 'product')
43        k2 = inner_tree.InnerTreeKey('inner2', 'product')
44        self.assertNotEqual(k1, k2)
45        self.assertNotEqual(hash(k1), hash(k2))
46        self.assertLess(k1, k2)
47        self.assertGreater(k2, k1)
48
49        k1 = inner_tree.InnerTreeKey(['inner1', 'o1'], 'product')
50        k2 = inner_tree.InnerTreeKey(['inner1', 'o2'], 'product')
51        self.assertNotEqual(k1, k2)
52        self.assertNotEqual(hash(k1), hash(k2))
53        self.assertLess(k1, k2)
54        self.assertGreater(k2, k1)
55
56        k1 = inner_tree.InnerTreeKey(['inner1', 'o1'], 'product1')
57        k2 = inner_tree.InnerTreeKey(['inner1', 'o2'], 'product2')
58        self.assertNotEqual(k1, k2)
59        self.assertNotEqual(hash(k1), hash(k2))
60        self.assertLess(k1, k2)
61        self.assertGreater(k2, k1)
62
63
64class TestInnerTree(unittest.TestCase):
65    def setUp(self):
66        self.test_dir = tempfile.mkdtemp()
67        self.oldcwd = os.getcwd()
68        os.chdir(self.test_dir)
69        self.context = utils.ContextTest(self.test_dir, self.id())
70
71    def tearDown(self):
72        os.chdir(self.oldcwd)
73
74    def test_values(self):
75        tree = inner_tree.InnerTree(self.context, ["inner", "meld1", "meld2"], "product", "user")
76        self.assertEqual(tree.root, "inner")
77        self.assertEqual(tree.meld_dirs, ["meld1", "meld2"])
78        self.assertEqual(tree.product, "product")
79
80    def test_bad_meld(self):
81        with self.assertRaises(Exception):
82            inner_tree.InnerTree(self.context, ["inner", "/meld1"], "product", "user")
83
84    def test_meld_config(self):
85        # Create git projects in inner, meld1, meld2
86        os.makedirs(os.path.join(self.test_dir, 'inner'))
87        dirs = (('inner', 'p1'), ('meld1', 'p1'), ('meld1', 'p2'), ('meld2', 'p2'), ('meld2', 'p3'))
88        for d in dirs:
89            os.makedirs(os.path.join(self.test_dir, *d, '.git'))
90        tree = inner_tree.InnerTree(self.context, ["inner", "meld1", "meld2"], "product", "user")
91        meld_config = tree.meld_config
92        srcs = {x.src:x for x in meld_config.mounts}
93
94        # inner/p1 is a git project, so it wins.
95        self.assertNotIn(os.path.join(self.test_dir, 'meld1', 'p1'), srcs)
96
97        p2 = os.path.join(self.test_dir, 'meld1', 'p2')
98        self.assertIn(p2, srcs)
99        self.assertEqual(os.path.abspath(os.path.join('inner', 'p2')), srcs[p2].dst)
100        # meld1/p2 was melded first, so it wins.
101        self.assertNotIn(os.path.join(self.test_dir, 'meld2', 'p2'), srcs)
102
103        p3 = os.path.join(self.test_dir, 'meld2', 'p3')
104        self.assertIn(p3, srcs)
105        self.assertEqual(os.path.abspath(os.path.join('inner', 'p3')), srcs[p3].dst)
106
107
108if __name__ == "__main__":
109    unittest.main()
110
111# vim: sts=4:ts=4:sw=4
112