def test_get_non_existing_cell_raises_exception(self):
        ss = Spreadsheet(self.basic_data)
        with self.assertRaises(InvalidCellIdException):
            ss.get_value(0, -1)

        with self.assertRaises(InvalidCellIdException):
            ss.get_value(29, 1)
    def test_set_value_with_references(self):
        self.basic_data[4][5] = 'A9'
        ss = Spreadsheet(self.basic_data)

        new_value = ss.get_value(0, 8) + ss.get_value(1, 5) + 10

        ss.set_value(4, 5, 'A9 + B6 + 10')
        self.assertEquals(ss.get_value(4, 5), new_value)
    def test_set_value_modifying_references(self):
        self.basic_data[0][0] = 'A2'
        self.basic_data[1][0] = 'A1'
        ss = Spreadsheet(self.basic_data)
        self.assertEquals(ss.get_value(0, 0), float(self.basic_data[0][1]))
        self.assertEquals(ss.get_value(1, 0), float(self.basic_data[0][1]))

        ss.set_value(0, 0, 'A3')
        self.assertEquals(ss.get_value(0, 0), float(self.basic_data[0][2]))
        self.assertEquals(ss.get_value(1, 0), float(self.basic_data[0][2]))
    def test_set_value_with_dependent_cells(self):
        self.basic_data[0][0] = '0'
        for j in range(1, Spreadsheet.COLUMNS):
            self.basic_data[0][j] = 'A%d + 1' % j

        ss = Spreadsheet(self.basic_data)
        for j in range(Spreadsheet.COLUMNS):
            ss.get_value(0, j)

        ss.set_value(0, 0, '1')
        for j in range(Spreadsheet.COLUMNS - 1, -1, -1):
            self.assertEquals(ss.get_value(0, j), j+1)
    def test_initialize_and_access_spreadsheet_with_references(self):
        self.basic_data[0][0] = "10"
        for j in range(1, Spreadsheet.COLUMNS):
            self.basic_data[0][j] = "A1"

        ss = Spreadsheet(self.basic_data)
        for j in range(Spreadsheet.COLUMNS):
            self.assertEquals(ss.get_value(0, j), 10)
    def test_get_cells_with_references(self):
        computed_fib = [0, 1, 1, 2, 3, 5, 8, 13, 21]
        self.basic_data[0][0] = '0'
        self.basic_data[0][1] = '1'
        for j in range(2, Spreadsheet.COLUMNS):
            self.basic_data[0][j] = "A{} + A{}".format(str(j+1-2), str(j+1-1))

        ss = Spreadsheet(self.basic_data)
        for j in range(Spreadsheet.COLUMNS - 1, -1, -1):
            self.assertEquals(ss.get_value(0, j), computed_fib[j])
 def test_set_value_without_references(self):
     ss = Spreadsheet(self.basic_data)
     new_value = ss.get_value(4, 5) + 10
     ss.set_value(4, 5, str(new_value))
     self.assertEquals(ss.get_value(4, 5), new_value)
 def test_get_cell_with_auto_reference_raises_exception(self):
     self.basic_data[0][0] = 'A1'
     ss = Spreadsheet(self.basic_data)
     with self.assertRaises(CircularReferenceException):
         ss.get_value(0, 0)
 def test_initialize_and_access_spreadsheet_without_references(self):
     ss = Spreadsheet(self.basic_data)
     for i in range(Spreadsheet.ROWS):
         for j in range(Spreadsheet.COLUMNS):
             continue
             self.assertEquals(ss.get_value(i, j), float(self.basic_data[i][j]))