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