1from pyexcel import Sheet 2from _compact import OrderedDict 3 4from nose.tools import eq_, raises, assert_not_in 5 6 7class TestSheetRow: 8 def setUp(self): 9 self.data = [ 10 ["Row 0", -1, -2, -3], 11 ["Row 1", 1, 2, 3], 12 ["Row 2", 4, 5, 6], 13 ["Row 3", 7, 8, 9], 14 ] 15 16 def test_negative_row_index(self): 17 s = Sheet(self.data, "test") 18 data = s.row[-1] 19 eq_(data, self.data[-1]) 20 21 def test_formatter_by_named_row(self): 22 s = Sheet(self.data, "test") 23 s.name_rows_by_column(0) 24 s.row.format("Row 1", str) 25 eq_(s.row["Row 1"], ["1", "2", "3"]) 26 27 def test_rownames(self): 28 s = Sheet(self.data, "test", name_rows_by_column=0) 29 eq_(s.rownames, ["Row 0", "Row 1", "Row 2", "Row 3"]) 30 custom_rows = ["R0", "R1", "R2", "R3"] 31 s.rownames = custom_rows 32 eq_(s.rownames, custom_rows) 33 34 def test_rownames2(self): 35 custom_rows = ["R0", "R1", "R2", "R3"] 36 s = Sheet(self.data, "test", rownames=custom_rows) 37 eq_(s.rownames, custom_rows) 38 39 @raises(NotImplementedError) 40 def test_rownames3(self): 41 custom_rows = ["R0", "R1", "R2", "R3"] 42 Sheet(self.data, "test", name_rows_by_column=0, rownames=custom_rows) 43 44 def test_formatter_by_named_row_2(self): 45 s = Sheet(self.data, "test") 46 s.name_rows_by_column(0) 47 s.row.format("Row 1", str) 48 eq_(s.row["Row 1"], ["1", "2", "3"]) 49 50 def test_row_series_to_dict(self): 51 s = Sheet(self.data, "test") 52 s.name_rows_by_column(0) 53 content = s.to_dict(True) 54 keys = ["Row 0", "Row 1", "Row 2", "Row 3"] 55 assert keys == list(content.keys()) 56 57 @raises(TypeError) 58 def test_extend_rows_using_wrong_data_type(self): 59 s = Sheet(self.data, "test") 60 s.name_rows_by_column(0) 61 s.extend_rows([1, 2]) 62 63 def test_formatter_by_named_row2(self): 64 """Test a list of string as index""" 65 s = Sheet(self.data, "test") 66 s.name_rows_by_column(0) 67 s.row.format(["Row 1", "Row 2"], str) 68 assert s.row["Row 1"] == ["1", "2", "3"] 69 assert s.row["Row 2"] == ["4", "5", "6"] 70 71 def test_add(self): 72 s = Sheet(self.data, "test") 73 s.name_rows_by_column(0) 74 data = OrderedDict({"Row 5": [10, 11, 12]}) 75 s1 = s.row + data 76 assert s1.row["Row 5"] == [10, 11, 12] 77 assert_not_in("Row 5", s.row) 78 79 def test_iadd(self): 80 s = Sheet(self.data, "test") 81 s.name_rows_by_column(0) 82 data = OrderedDict({"Row 5": [10, 11, 12]}) 83 s.row += data 84 assert s.row["Row 5"] == [10, 11, 12] 85 86 def test_dot_notation(self): 87 s = Sheet(self.data, "test") 88 s.name_rows_by_column(0) 89 eq_(s.row.Row_3, [7, 8, 9]) 90 91 @raises(TypeError) 92 def test_add_wrong_type(self): 93 s = Sheet(self.data, "test") 94 s.name_rows_by_column(0) 95 s = s.row + "string type" # bang 96 97 @raises(ValueError) 98 def test_delete_named_row(self): 99 s = Sheet(self.data, "test") 100 s.name_rows_by_column(0) 101 del s.row["Row 2"] 102 assert s.number_of_rows() == 3 103 s.row["Row 2"] # already deleted 104 105 @raises(ValueError) 106 def test_delete_indexed_row1(self): 107 s = Sheet(self.data, "test") 108 s.name_rows_by_column(0) 109 del s.row[2] 110 assert s.number_of_rows() == 3 111 s.row["Row 2"] # already deleted 112 113 @raises(ValueError) 114 def test_delete_indexed_row2(self): 115 s = Sheet(self.data, "test") 116 s.name_rows_by_column(0) 117 s.delete_named_row_at(2) 118 assert s.number_of_rows() == 3 119 s.row["Row 2"] # already deleted 120 121 @raises(ValueError) 122 def test_delete_indexed_row3(self): 123 s = Sheet(self.data, "test") 124 s.name_rows_by_column(0) 125 del s.row["Row 0", "Row 1"] 126 assert s.number_of_rows() == 2 127 s.row["Row 1"] # already deleted 128 129 @raises(ValueError) 130 def test_delete_row(self): 131 s = Sheet(self.data, "test") 132 del s.row[1, 2] 133 assert s.number_of_rows() == 2 134 s.row["Row 1"] # already deleted 135 136 def test_column_locator2(self): 137 """ 138 Remove odd columns 139 """ 140 sheet = Sheet(self.data) 141 142 def locator(index, _): 143 return index % 2 == 0 144 145 del sheet.row[locator] 146 assert sheet.number_of_rows() == 2 147 148 def test_set_named_row(self): 149 s = Sheet(self.data, "test") 150 s.name_rows_by_column(0) 151 s.row["Row 2"] = [11, 11, 11] 152 assert s.row["Row 2"] == [11, 11, 11] 153 154 def test_set_indexed_column(self): 155 s = Sheet(self.data, "test", name_rows_by_column=0) 156 s.column[0] = [12, 3, 4, 5] 157 assert s.column[0] == [12, 3, 4, 5] 158