def test_example_data(self): """UPDATED: the order of the subtrees now doesn't matter, as they will be sorted alphabetically by the test itself. """ tree = FileSystemTree(EXAMPLE_PATH) _sort_subtrees(tree) rects = tree.generate_treemap((0, 0, 800, 1000)) # This should be one rectangle per file in 'B'. self.assertEqual(len(rects), 4) # UPDATED: # Here, we illustrate the correct order of the returned rectangles. # Note that this corresponds to the folder contents always being # sorted in alphabetical order. rect_f1 = rects[0][0] # f1.txt rect_f2 = rects[1][0] # f2.txt rect_f3 = rects[2][0] # f3.txt rect_f4 = rects[3][0] # f4.txt # The 'A' rectangle is (0, 0, 800, 750). self.assertEqual(rect_f1, (0, 0, 400, 750)) # Note the rounding down on f2. self.assertEqual(rect_f2, (400, 0, 133, 750)) # Note the adjustment to f3 to bring the total width to 800. self.assertEqual(rect_f3, (533, 0, 267, 750)) # The 'f4.txt' rectangle. self.assertEqual(rect_f4, (0, 750, 800, 250))
def run_treemap_file_system(path: str) -> None: """Run a treemap visualisation for the given path's file structure. Precondition: <path> is a valid path to a file or folder. """ file_tree = FileSystemTree(path) run_visualisation(file_tree)
def test_delete_selected_leaf(self): tree = FileSystemTree('TestFolder') self.assertEqual(tree.data_size, 11) leaf = tree._subtrees[2]._subtrees[0]._subtrees[0] leaf.delete_selected_leaf() self.assertEqual(tree._subtrees[2]._subtrees[0]._subtrees[0]._root, 'T10.txt') self.assertEqual(tree.data_size, 10)
def test_multiple_nonempty(self): file_tree = FileSystemTree(PATH) result = file_tree.generate_treemap((0, 0, 800, 1000)) lst = [(0, 0, 800, 13), (0, 13, 800, 20), (0, 33, 800, 43), (0, 76, 722, 381), (722, 76, 16, 381), (738, 76, 5, 381), (743, 76, 43, 381), (786, 76, 1, 381), (787, 76, 12, 381), (799, 76, 1, 381)] for i in range(10): self.assertEqual(result[i][0], lst[i])
def test_example_data_parent_tree_of_subtrees(self): tree = FileSystemTree(EXAMPLE_PATH) self.assertEqual(len(tree._subtrees), 2) for subtree in tree._subtrees: # Note the use of assertIs rather than assertEqual. # This checks ids rather than values. self.assertIs(subtree._parent_tree, tree)
def test_example_data_basic(self): tree = FileSystemTree(EXAMPLE_PATH) self.assertEqual(tree._root, 'B') self.assertIs(tree._parent_tree, None) self.assertEqual(tree.data_size, 40) # Check colours for i in range(3): self.assertGreaterEqual(tree.colour[i], 0) self.assertLessEqual(tree.colour[i], 255)
def test_zero_nonempty(self): file_tree = FileSystemTree(PATH2) original_len = len(file_tree._subtrees) for subtree in file_tree._subtrees: subtree.del_leaf() self.assertEqual(subtree._root, None) self.assertEqual(len(file_tree._subtrees), original_len) result0 = file_tree.generate_treemap((0, 0, 800, 1000)) result1 = file_tree.generate_treemap((0, 0, 1000, 800)) self.assertEqual([], result0) self.assertEqual([], result1)
def test_single_file(self, x, y, width, height): tree = FileSystemTree(os.path.join(EXAMPLE_PATH, 'f4.txt')) rects = tree.generate_treemap((x, y, width, height)) # This should be just a single rectangle and colour returned self.assertEqual(len(rects), 1) rect, colour = rects[0] self.assertEqual(rect, (x, y, width, height)) for i in range(3): self.assertGreaterEqual(colour[i], 0) self.assertLessEqual(colour[i], 255)
def test_single_file(self): tree = FileSystemTree(os.path.join(EXAMPLE_PATH, 'f4.txt')) self.assertEqual(tree._root, 'f4.txt') self.assertEqual(tree._subtrees, []) self.assertIs(tree._parent_tree, None) self.assertEqual(tree.data_size, 10) # Check colours for i in range(3): self.assertGreaterEqual(tree.colour[i], 0) self.assertLessEqual(tree.colour[i], 255)
def test_one_empty(self): file_tree = FileSystemTree(PATH2) original_len = len(file_tree._subtrees) file_tree._subtrees[-1].del_leaf() self.assertEqual(file_tree._subtrees[-1]._root, None) self.assertEqual(len(file_tree._subtrees), original_len) result = file_tree.generate_treemap((0, 0, 800, 1000)) lst = [(0, 0, 800, 904), (0, 904, 800, 19), (0, 923, 800, 6), (0, 929, 800, 54), (0, 983, 800, 1), (0, 984, 800, 16)] for each in result: self.assertEqual(each[0], lst[result.index(each)]) for each in lst: self.assertEqual(each, result[lst.index(each)][0])
def test_example_data_subtree_order(self): """NOTE: the order of the subtrees for a FileSystemTree object *must* match the order of the items returned by os.listdir. """ tree = FileSystemTree(EXAMPLE_PATH) self.assertEqual(len(tree._subtrees), 2) first, second = tree._subtrees self.assertEqual(first._root, 'A') self.assertEqual(len(first._subtrees), 3) self.assertEqual(first.data_size, 30) self.assertEqual(second._root, 'f4.txt') self.assertEqual(second._subtrees, []) self.assertEqual(second.data_size, 10)
def test_example_data_subtree_order(self): """UPDATED: the order of the subtrees now doesn't matter, as they will be sorted alphabetically by the test itself. """ tree = FileSystemTree(EXAMPLE_PATH) _sort_subtrees(tree) self.assertEqual(len(tree._subtrees), 2) first, second = tree._subtrees self.assertEqual(first._root, 'A') self.assertEqual(len(first._subtrees), 3) self.assertEqual(first.data_size, 30) self.assertEqual(second._root, 'f4.txt') self.assertEqual(second._subtrees, []) self.assertEqual(second.data_size, 10)
def test_example_data2(self): tree = FileSystemTree('TestFolder') rects = tree.generate_treemap((0, 0, 1100, 900)) self.assertEqual(len(rects), 11) rect_f1 = rects[0][0] rect_f2 = rects[1][0] rect_f3 = rects[2][0] rect_f4 = rects[3][0] rect_f5 = rects[4][0] rect_f6 = rects[5][0] rect_f7 = rects[6][0] rect_f8 = rects[7][0] self.assertEqual(rect_f1, (0, 0, 300, 300)) self.assertEqual(rect_f2, (0, 300, 300, 300)) self.assertEqual(rect_f3, (0, 600, 300, 300)) self.assertEqual(rect_f4, (300, 0, 300, 300)) self.assertEqual(rect_f5, (300, 300, 300, 300)) self.assertEqual(rect_f6, (300, 600, 300, 300)) self.assertEqual(rect_f7, (600, 0, 250, 360)) self.assertEqual(rect_f8, (850, 0, 250, 360))
def test_example_data(self): tree = FileSystemTree(EXAMPLE_PATH) rects = tree.generate_treemap((0, 0, 800, 1000)) # This should be one rectangle per file in 'B'. self.assertEqual(len(rects), 4) # Here, we illustrate the correct order of the returned rectangle. # Note that this again corresponds to the order in which os.listdir # reports the contents of a folder. rect_f1 = rects[0][0] rect_f2 = rects[1][0] rect_f3 = rects[2][0] rect_f4 = rects[3][0] self.assertEqual(rect_f1, (0, 0, 400, 750)) # Note the rounding down on f2. self.assertEqual(rect_f2, (400, 0, 133, 750)) # Note that f3 has a width of 267, to bring the total width of # the 'A' rectangle to exactly 800. self.assertEqual(rect_f3, (533, 0, 267, 750)) self.assertEqual(rect_f4, (0, 750, 800, 250))
def test_empty_folder(self): tree = FileSystemTree('empty folder case') tree.delete_empty_trees() self.assertEqual(len(tree._subtrees), 1)
def test1(self): path1 = 'C:\\Users\\User\\Desktop\\csc148\\assignments\\a1' t = FileSystemTree(path1)
def test_delete_child(self): tree = FileSystemTree('TestFolder\\F1') child = tree._subtrees[0] tree.delete_child(child) self.assertEqual(tree._subtrees[0]._root, 'T2.txt')
def test_find_leaf5(self): tree = FileSystemTree('TestFolder') leaf = tree.find_leaf((0, 0, 1100, 900), (90, 800)) self.assertEqual(leaf._root, 'T3.txt')
def test_find_leaf3(self): tree = FileSystemTree('TestFolder\\F1') leaf = tree.find_leaf((0, 0, 1100, 900), (600, 500)) self.assertEqual(leaf._root, 'T2.txt')
def test_delete_single(self): tree = FileSystemTree('TestFolder\\F1\\T1.txt')
""" pop_tree = PopulationTree(True) run_visualisation(pop_tree) def set_selected_leaf(leaf_info, selected_leaf): """Compares selected leaf to the first item in leaf_info. If the two are different or if selected_leaf is an empty string, selected_leaf will be set to that item. If the first item in leaf_info and the selected_leaf are the same string, selected_leaf will be set to an empty string. Returns the selected_leaf as either None or a new AbstractTree leaf. @type leaf_info: list[str] @type selected_leaf: str @rtype: str """ if leaf_info[0] == selected_leaf: return ['', ''] else: selected_leaf = leaf_info[0] selected_leaf_data_size = leaf_info[1] return [selected_leaf, selected_leaf_data_size] if __name__ == '__main__': path = '/Users/a16472/Desktop/Balco' fst = FileSystemTree(path) run_visualisation(fst)