def test_eq_neq(self): cell1 = Cell() cell1.formula = '=formula' cell2 = Cell() cell2.formula = '=formula' self.assertTrue(cell1 == cell2) self.assertFalse(cell1 != cell2) cell1.value = 10 self.assertFalse(cell1 == cell2) self.assertTrue(cell1 != cell2) cell2.value = 10 self.assertTrue(cell1 == cell2) self.assertFalse(cell1 != cell2) cell1.formatted_value = 'formatted' self.assertFalse(cell1 == cell2) self.assertTrue(cell1 != cell2) cell2.formatted_value = 'formatted' self.assertTrue(cell1 == cell2) self.assertFalse(cell1 != cell2) cell1.error = 'this error' self.assertFalse(cell1 == cell2) self.assertTrue(cell1 != cell2) cell2.error = 'this error' self.assertTrue(cell1 == cell2) self.assertFalse(cell1 != cell2) self.assertFalse(cell1 == 'hello') self.assertTrue(cell1 != 'hello')
def test_recalc_cell_should_clear_cell_error_and_not_add_to_console_text_on_eval_succeeding(self): cell = Cell() cell.formula = '=123' cell.error = 'old error, just hanging around...' worksheet = Worksheet() location = (1, 11) worksheet[location] = cell node = Mock() node.parents = [] graph = {location: node } context = { 'worksheet': { location: cell, } } recalculate_cell(location, Mock(), graph, context) self.assertEqual( worksheet[location].error, None ) self.assertEqual( worksheet[location].value, 123 ) self.assertEqual( worksheet._console_text, '' )
def test_recalc_cell_catches_cell_errors_and_adds_them_to_console(self): cell = Cell() cell.formula = "=123" cell.python_formula = '_raise(Exception("OMGWTFBBQ"))' cell.error = 'old error, just hanging around...' worksheet = Worksheet() location = (1, 11) worksheet[location] = cell # Mocked out to avoid explosion -- tested in another unit test. node = Mock() node.parents = [] graph = {location: node } context = { 'worksheet': worksheet, "_raise": _raise } worksheet.add_console_text = Mock() recalculate_cell(location, Mock(), graph, context) self.assertEqual( worksheet[location].error, 'Exception: OMGWTFBBQ' ) expected_error_text = "Exception: OMGWTFBBQ\n Formula '%s' in A11\n" % ( cell.formula) self.assertCalledOnce(worksheet.add_console_text, expected_error_text) self.assertEquals(worksheet[location].value, undefined)
def test_repr(self): cell = Cell() cell.formula = 'f' self.assertEquals(repr(cell), "<Cell formula=f value=<undefined> formatted_value=u''>") cell = Cell() cell.value = 'v' self.assertEquals(repr(cell), "<Cell formula=None value='v' formatted_value=u'v'>") cell = Cell() cell.value = 23 self.assertEquals(repr(cell), "<Cell formula=None value=23 formatted_value=u'23'>") cell = Cell() cell.formula = 'f' cell.value = 'v' self.assertEquals(repr(cell), "<Cell formula=f value='v' formatted_value=u'v'>") cell = Cell() cell.formula = 'f' cell.value = 'v' cell.formatted_value = u'fv' self.assertEquals(repr(cell), "<Cell formula=f value='v' formatted_value=u'fv'>") cell = Cell() cell.formula = 'f' cell.value = 'v' cell.formatted_value = u'fv' cell.error = 'e' self.assertEquals(repr(cell), "<Cell formula=f value='v' formatted_value=u'fv' error='e'>")
def test_recalc_cell_catches_cell_errors_and_adds_them_to_console(self): cell = Cell() cell.formula = "=123" cell.python_formula = '_raise(Exception("OMGWTFBBQ"))' cell.error = 'old error, just hanging around...' worksheet = Worksheet() location = (1, 11) worksheet[location] = cell # Mocked out to avoid explosion -- tested in another unit test. node = Mock() node.parents = [] graph = {location: node} context = {'worksheet': worksheet, "_raise": _raise} worksheet.add_console_text = Mock() recalculate_cell(location, Mock(), graph, context) self.assertEqual(worksheet[location].error, 'Exception: OMGWTFBBQ') expected_error_text = "Exception: OMGWTFBBQ\n Formula '%s' in A11\n" % ( cell.formula) self.assertCalledOnce(worksheet.add_console_text, expected_error_text) self.assertEquals(worksheet[location].value, undefined)
def test_load_constants_should_clear_errors_for_constants(self): cell = Cell() cell.formula = "a constant" cell.error = 'Ohno!' worksheet = Worksheet() worksheet.A1 = cell load_constants(worksheet) self.assertIsNone(cell.error)
def test_clear_clears_stuff(self): cell = Cell() cell.value = 29 cell.formula = 'e equals emcee squared' cell.python_formula = 'e equals emcee squared' cell.dependencies = [(1, 1), (2, 2)] cell.formatted_value = "wibble" cell.error = 'a spear' cell.clear() self.assertEquals(cell.value, undefined) self.assertEquals(cell.formula, None) self.assertEquals(cell.python_formula, None) self.assertEquals(Cell().dependencies, []) self.assertEquals(cell.formatted_value, u"") self.assertEquals(cell.error, None)
def worksheet_from_json(json_string): #use jsonlib for read ops because of better performance #keep simplejson for write ops as it's more robust worksheet_dict = jsonlib.read(json_string) worksheet = Worksheet() for (key, value) in worksheet_dict.iteritems(): if key == "_console_text": worksheet._console_text = value elif key == "_usercode_error": worksheet._usercode_error = value else: col_str, row_str = key.split(",") cell = Cell() cell._formula = value["formula"] cell._python_formula = value.get("python_formula") cell.dependencies = map(tuple, value.get("dependencies", [])) cell.error = value.get("error") cell._value = value.get("value", undefined) cell.formatted_value = value["formatted_value"] worksheet[int(col_str), int(row_str)] = cell return worksheet
def test_repr(self): cell = Cell() cell.formula = 'f' self.assertEquals( repr(cell), "<Cell formula=f value=<undefined> formatted_value=u''>") cell = Cell() cell.value = 'v' self.assertEquals( repr(cell), "<Cell formula=None value='v' formatted_value=u'v'>") cell = Cell() cell.value = 23 self.assertEquals( repr(cell), "<Cell formula=None value=23 formatted_value=u'23'>") cell = Cell() cell.formula = 'f' cell.value = 'v' self.assertEquals(repr(cell), "<Cell formula=f value='v' formatted_value=u'v'>") cell = Cell() cell.formula = 'f' cell.value = 'v' cell.formatted_value = u'fv' self.assertEquals(repr(cell), "<Cell formula=f value='v' formatted_value=u'fv'>") cell = Cell() cell.formula = 'f' cell.value = 'v' cell.formatted_value = u'fv' cell.error = 'e' self.assertEquals( repr(cell), "<Cell formula=f value='v' formatted_value=u'fv' error='e'>")
def test_recalc_cell_should_clear_cell_error_and_not_add_to_console_text_on_eval_succeeding( self): cell = Cell() cell.formula = '=123' cell.error = 'old error, just hanging around...' worksheet = Worksheet() location = (1, 11) worksheet[location] = cell node = Mock() node.parents = [] graph = {location: node} context = { 'worksheet': { location: cell, } } recalculate_cell(location, Mock(), graph, context) self.assertEqual(worksheet[location].error, None) self.assertEqual(worksheet[location].value, 123) self.assertEqual(worksheet._console_text, '')