def test_clipboad_copy_retrieves_stuff_from_sheet_and_removes_offset(self):
        self.maxDiff = None
        clipboard = Clipboard()
        sheet = Sheet()
        worksheet = Worksheet()
        worksheet.C2.formula = 'foo'
        worksheet.C2.formatted_value = 'fv'
        worksheet.D2.formatted_value = 'fv to become formula'

        sheet.jsonify_worksheet(worksheet)
        start = (3, 2)
        end = (4, 3)
        cut_called_previously = True
        clipboard.is_cut = cut_called_previously
        clipboard.copy(sheet, start, end)
        self.assertEquals(
            json.loads(clipboard.contents_json),
            {
                '0,0':{'formula': 'foo',
                    'formatted_value': 'fv'},
                '1,0':{'formula': 'fv to become formula',
                    'formatted_value': 'fv to become formula'},
                '0,1':{'formula': '',
                    'formatted_value': ''},
                '1,1':{'formula': '',
                    'formatted_value': ''}
            }
        )
        self.assertEquals(clipboard.source_left, 3)
        self.assertEquals(clipboard.source_top, 2)
        self.assertEquals(clipboard.source_right, 4)
        self.assertEquals(clipboard.source_bottom, 3)

        self.assertEquals(clipboard.is_cut, False)
        self.assertEquals(clipboard.source_sheet, None)
    def test_paste_to_for_cut_different_sheet(self):
        self.user = User()
        self.user.save()

        c2 = Cell()
        c2.formula = 'foo'
        c2.formatted_value = 'fv'
        d2 = Cell()
        d2.formula = 'fv to become formula'
        d2.formatted_value = d2.formula
        c3 = Cell()
        d3 = Cell()
        c5 = Cell()
        c5.formula = 'a safe source cell'
        dest_cells = {
            (3, 4): c2,
            (3, 5): c3,
            (4, 4): d2,
            (4, 5): d3,
        }

        source_sheet = Sheet()
        source_sheet.owner = self.user
        source_sheet.save()

        clipboard = Clipboard()
        clipboard.to_cells = Mock()
        clipboard.to_cells.return_value = dest_cells.iteritems()
        clipboard.is_cut = True
        clipboard.source_sheet = source_sheet
        clipboard.source_left = 3
        clipboard.source_top = 2
        clipboard.source_right = 4
        clipboard.source_bottom = 3

        destination_sheet = Sheet()
        destination_sheet.owner = self.user
        destination_worksheet = Worksheet()
        destination_worksheet.C4.formula = 'i am in danger!'
        destination_worksheet.A1.formula = 'i am safe :-)'
        destination_sheet.jsonify_worksheet(destination_worksheet)
        destination_sheet.save()

        clipboard.paste_to(destination_sheet, (3, 4), (3, 4))

        updated_worksheet = destination_sheet.unjsonify_worksheet()
        self.assertEquals(updated_worksheet.A1.formula, 'i am safe :-)')
        self.assertEquals(updated_worksheet.C4.formula, c2.formula)
        self.assertEquals(updated_worksheet.D4.formula, d2.formula)
        self.assertEquals(updated_worksheet.C5.formula, c3.formula)
        self.assertEquals(updated_worksheet.d5.formula, d3.formula)

        # paste should reset the clipboard so that future pastes act as
        # though they came from a copy
        self.assertEquals(clipboard.source_left, 3)
        self.assertEquals(clipboard.source_top, 4)
        self.assertEquals(clipboard.source_right, 4)
        self.assertEquals(clipboard.source_bottom, 5)
        self.assertEquals(clipboard.is_cut, False)
        self.assertEquals(clipboard.source_sheet, None)
    def test_paste_to_for_cut_different_sheet(self):
        self.user = User()
        self.user.save()

        c2 = Cell()
        c2.formula = 'foo'
        c2.formatted_value = 'fv'
        d2 = Cell()
        d2.formula = 'fv to become formula'
        d2.formatted_value = d2.formula
        c3 = Cell()
        d3 = Cell()
        c5 = Cell()
        c5.formula = 'a safe source cell'
        dest_cells = {
            (3, 4): c2,
            (3, 5): c3,
            (4, 4): d2,
            (4, 5): d3,
        }

        source_sheet = Sheet()
        source_sheet.owner = self.user
        source_sheet.save()

        clipboard = Clipboard()
        clipboard.to_cells = Mock()
        clipboard.to_cells.return_value = dest_cells.iteritems()
        clipboard.is_cut = True
        clipboard.source_sheet = source_sheet
        clipboard.source_left = 3
        clipboard.source_top = 2
        clipboard.source_right = 4
        clipboard.source_bottom = 3

        destination_sheet = Sheet()
        destination_sheet.owner = self.user
        destination_worksheet = Worksheet()
        destination_worksheet.C4.formula = 'i am in danger!'
        destination_worksheet.A1.formula = 'i am safe :-)'
        destination_sheet.jsonify_worksheet(destination_worksheet)
        destination_sheet.save()

        clipboard.paste_to(destination_sheet, (3, 4), (3, 4))

        updated_worksheet = destination_sheet.unjsonify_worksheet()
        self.assertEquals(updated_worksheet.A1.formula, 'i am safe :-)')
        self.assertEquals(updated_worksheet.C4.formula, c2.formula)
        self.assertEquals(updated_worksheet.D4.formula, d2.formula)
        self.assertEquals(updated_worksheet.C5.formula, c3.formula)
        self.assertEquals(updated_worksheet.d5.formula, d3.formula)

        # paste should reset the clipboard so that future pastes act as
        # though they came from a copy
        self.assertEquals(clipboard.source_left, 3)
        self.assertEquals(clipboard.source_top, 4)
        self.assertEquals(clipboard.source_right, 4)
        self.assertEquals(clipboard.source_bottom, 5)
        self.assertEquals(clipboard.is_cut, False)
        self.assertEquals(clipboard.source_sheet, None)
    def test_clipboad_copy_retrieves_stuff_from_sheet_and_removes_offset(self):
        self.maxDiff = None
        clipboard = Clipboard()
        sheet = Sheet()
        worksheet = Worksheet()
        worksheet.C2.formula = 'foo'
        worksheet.C2.formatted_value = 'fv'
        worksheet.D2.formatted_value = 'fv to become formula'

        sheet.jsonify_worksheet(worksheet)
        start = (3, 2)
        end = (4, 3)
        cut_called_previously = True
        clipboard.is_cut = cut_called_previously
        clipboard.copy(sheet, start, end)
        self.assertEquals(
            json.loads(clipboard.contents_json), {
                '0,0': {
                    'formula': 'foo',
                    'formatted_value': 'fv'
                },
                '1,0': {
                    'formula': 'fv to become formula',
                    'formatted_value': 'fv to become formula'
                },
                '0,1': {
                    'formula': '',
                    'formatted_value': ''
                },
                '1,1': {
                    'formula': '',
                    'formatted_value': ''
                }
            })
        self.assertEquals(clipboard.source_left, 3)
        self.assertEquals(clipboard.source_top, 2)
        self.assertEquals(clipboard.source_right, 4)
        self.assertEquals(clipboard.source_bottom, 3)

        self.assertEquals(clipboard.is_cut, False)
        self.assertEquals(clipboard.source_sheet, None)