summaryrefslogtreecommitdiff
path: root/trunk/dimbola/taglist_tests.py
blob: 32ccfd739f751d9d1845ee254daa3e2b97f0c502 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Copyright (C) 2009  Lars Wirzenius <liw@liw.fi>
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


import unittest

import gtk

import dimbola


class TaglistTests(unittest.TestCase):

    '''Show/edit selected photo's tags.'''

    def setUp(self):
        self.textview = gtk.TextView()

        self.taglist = dimbola.Taglist(self.textview, None, None)

        self.photoid = 12

        self.tagid = 34
        self.tagname = 'yeehaa'
        self.text_tag_name = 'taglist-photoid-12-tagid-34'
        
        self.tagid2 = 56
        self.tagname2 = 'blib'
        self.text_tag_name2 = 'taglist-photoid-12-tagid-56'
        
        self.tags = [(self.tagid, self.tagname), (self.tagid2, self.tagname2)]

    def test_creates_text_tag_name_correctly(self):
        self.assertEqual(self.taglist.text_tag_name(self.photoid, self.tagid),
                         self.text_tag_name)

    def test_recognizes_its_text_tag_name(self):
        self.assert_(self.taglist.is_our_text_tag_name(self.text_tag_name))

    def test_parses_text_tag_name_correctly(self):
        self.assertEqual(self.taglist.parse_text_tag_name(self.text_tag_name),
                         (self.photoid, self.tagid))

    def test_has_no_text_tags_initially(self):
        self.assertEqual(self.taglist.text_tag_names, [])

    def test_set_tags_results_in_text_tags(self):
        self.taglist.set_tags(self.photoid, self.tags)
        self.assertEqual(self.taglist.text_tag_names, 
                         [self.text_tag_name, self.text_tag_name2])

    def test_set_tags_results_in_buffer_text(self):
        self.taglist.set_tags(self.photoid, self.tags)
        start, end = self.taglist.buf.get_bounds()
        text = self.taglist.buf.get_text(start, end)
        # Note that we assume tagname2 comes before tagname in sorted order.
        self.assertEqual(text, '%s; %s' % (self.tagname2, self.tagname))

    def test_clear_empties_text(self):
        self.taglist.set_tags(self.photoid, self.tags)
        self.taglist.clear()
        start, end = self.taglist.buf.get_bounds()
        text = self.taglist.buf.get_text(start, end)
        self.assertEqual(text, '')

    def test_clear_empties_text_tags(self):
        self.taglist.set_tags(self.photoid, self.tags)
        self.taglist.clear()
        self.assertEqual(self.taglist.text_tag_names, [])

    def test_finds_ids_at_iter(self):
        self.taglist.set_tags(self.photoid, self.tags)
        it = self.taglist.buf.get_iter_at_offset(0)
        photoid, tagid = self.taglist.iter_to_ids(it)
        self.assertEqual(photoid, self.photoid)
        self.assertEqual(tagid, self.tagid2)

    def test_finds_no_ids_outside_tags(self):
        self.taglist.set_tags(self.photoid, self.tags)
        it = self.taglist.buf.get_end_iter()
        self.assertEqual(self.taglist.iter_to_ids(it), (None, None))
        
    def test_selects_tagname_at_iterator(self):
        self.taglist.set_tags(self.photoid, self.tags)
        it = self.taglist.buf.get_iter_at_offset(0)
        self.taglist.select_tagname_at_iter(it)
        
        ins = self.taglist.buf.get_insert()
        ins_it = self.taglist.buf.get_iter_at_mark(ins)
        self.assertEqual(ins_it.get_offset(), 0)

        sel = self.taglist.buf.get_selection_bound()
        sel_it = self.taglist.buf.get_iter_at_mark(sel)
        self.assertEqual(sel_it.get_offset(), len(self.tagname2))
        
    def test_returns_correct_tagid_when_tagname_is_selected(self):
        self.taglist.set_tags(self.photoid, self.tags)
        it = self.taglist.buf.get_iter_at_offset(0)
        self.taglist.select_tagname_at_iter(it)
        
        self.assertEqual(self.taglist.selected_tag(), 
                         (self.photoid, self.tagid2))