def testTableWithLists(self):
        if IGNORE_TEST:
            return
        nrow = NROW + 1
        ncol = 4
        formula_columns = [3, 2]
        formula1 = '''xx = range(1,%d)
Col_2 = []
for x in xx:
  Col_2.append(range(x))
''' % nrow
        formula2 = """Col_1 = []
for x in Col_2:
  Col_1.append(np.average(x))
"""
        base_response = self._createBaseTable(params=[NROW, ncol])
        old_table = self._getTableFromResponse(base_response)
        # Change the first formula
        response = self._setFormula(old_table, formula1, formula_columns[0])
        # Change the second formula
        response = self._setFormula(old_table, formula2, formula_columns[1])
        # Check the table
        new_table = self._getTableFromResponse(response)
        error = new_table.evaluate(user_directory=TEST_DIR)
        self.assertEqual(new_table.numColumns(), old_table.numColumns())
        self.assertTrue(
            compareTableData(old_table, new_table, excludes=formula_columns))
        val = new_table.getColumns()[formula_columns[1]].getCells()[1]
        self.assertEqual(val, 0.5)
 def _formulaColumn(self, column_idx, formula, isValid):
     # Inputs: column_idx - index of column whose formula is changed
     #         formula - new formula for column
     #         isValid - is a valid formula
     # Assumes that formula ony changes column_idx
     base_response = self._createBaseTable()
     table = self._getTableFromResponse(base_response)
     old_table = table.copy()
     column = table.columnFromIndex(column_idx)
     column_name = column.getName(is_global_name=False)
     old_formula = column.getFormula()
     # Reset the formula
     ajax_cmd = self._helper_http.ajaxCommandFactory()
     ajax_cmd['target'] = "Column"
     ajax_cmd['command'] = "Formula"
     ajax_cmd['columnName'] = column_name
     ajax_cmd['args[]'] = formula
     command_url = self._helper_http.createURLFromAjaxCommand(
         ajax_cmd, address=BASE_URL)
     response = self.client.get(command_url)
     content = json.loads(response.content)
     self.assertTrue(content.has_key("success"))
     # Check the table
     new_table = self._getTableFromResponse(response)
     new_column = new_table.childFromName(column_name, is_relative=False)
     if isValid:
         self.assertTrue(content["success"])
         self.assertEqual(formula, new_column.getFormula())
     else:
         self.assertFalse(content["success"])
         self.assertEqual(formula, new_column.getFormula())
     # Check the columns
     self.assertTrue(
         compareTableData(old_table, new_table, excludes=[column_idx]))
  def testTableWithLists(self):
    if IGNORE_TEST:
       return
    nrow = NROW + 1
    ncol = 4
    formula_columns = [3, 2]
    formula1 = '''xx = range(1,%d)
Col_2 = []
for x in xx:
  Col_2.append(range(x))
''' % nrow
    formula2 = """Col_1 = []
for x in Col_2:
  Col_1.append(np.average(x))
"""
    base_response = self._createBaseTable(params=[NROW, ncol])
    old_table = self._getTableFromResponse(base_response)
    # Change the first formula
    response = self._setFormula(formula1, formula_columns[0])
    # Change the second formula
    response = self._setFormula(formula2, formula_columns[1])
    # Check the table
    new_table = self._getTableFromResponse(response)
    error = new_table.evaluate(user_directory=TEST_DIR)
    self.assertEqual(new_table.numColumns(), old_table.numColumns())
    self.assertTrue(compareTableData(old_table, new_table, excludes=formula_columns))
    val = new_table.getColumns()[formula_columns[1]].getCells()[1]
    self.assertEqual(val, 0.5)
 def _formulaColumn(self, column_idx, formula, isValid):
   # Inputs: column_idx - index of column whose formula is changed
   #         formula - new formula for column
   #         isValid - is a valid formula
   # Assumes that formula ony changes column_idx
   base_response = self._createBaseTable()
   table = self._getTableFromResponse(base_response)
   old_table = table.copy()
   column = table.columnFromIndex(column_idx)
   old_formula = column.getFormula()
   # Reset the formula
   ajax_cmd = self._ajaxCommandFactory()
   ajax_cmd['target'] = "Column"
   ajax_cmd['command'] = "Formula"
   ajax_cmd['column'] = column_idx
   ajax_cmd['args[]'] = formula
   command_url = self._createURLFromAjaxCommand(ajax_cmd, address=BASE_URL)
   response = self.client.get(command_url)
   content = json.loads(response.content)
   self.assertTrue(content.has_key("success"))
   # Check the table
   new_table = self._getTableFromResponse(response)
   new_column = new_table.columnFromIndex(column_idx)
   if isValid:
     self.assertTrue(content["success"])
     self.assertEqual(formula, new_column.getFormula())
   else:
     self.assertFalse(content["success"])
     self.assertEqual(formula, new_column.getFormula())
   # Check the columns
   self.assertTrue(compareTableData(old_table, 
                                    new_table, 
                                    excludes=[column_idx]))
 def _testUndoTable(self, formula):
   colidx = 1
   # Inputs: formula - new formula for column
   base_response = self._createBaseTable()
   old_table = self._getTableFromResponse(base_response)
   column = old_table.columnFromIndex(colidx)
   self.assertIsNone(column.getFormula())
   # Change the formula
   changed_table = self._submitCommand("Column", "Formula", colidx, formula)
   column = changed_table.columnFromIndex(colidx)
   self.assertEqual(column.getFormula(), formula)
   # Undo the change
   undone_table = self._submitCommand("Table", "Undo", colidx, "")
   column = undone_table.columnFromIndex(colidx)
   self.assertIsNone(column.getFormula())
   self.assertTrue(compareTableData(old_table, undone_table))
 def _testUndoTable(self, formula):
     """
 :param str formula:
 :return Table:
 """
     colidx = 1
     # Inputs: formula - new formula for column
     base_response = self._createBaseTable()
     old_table = self._getTableFromResponse(base_response)
     column = old_table.columnFromIndex(colidx)
     self.assertIsNone(column.getFormula())
     # Change the formula
     changed_table = self._submitCommand(old_table, "Column", "Formula",
                                         colidx, formula)
     column = changed_table.columnFromIndex(colidx)
     self.assertEqual(column.getFormula(), formula)
     # Undo the change
     undone_table = self._submitCommand(changed_table, "Sheet", "Undo",
                                        colidx, "")
     column = undone_table.columnFromIndex(colidx)
     self.assertIsNone(column.getFormula())
     self.assertTrue(compareTableData(old_table, undone_table))
     return undone_table