# Copyright (C) 2009 Lars Wirzenius # # 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 . 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))