--- /dev/null
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import os
+import tempfile
+from nose.tools import *
+
+import vstorage
+
+
+def clear_directory(top):
+ for root, dirs, files in os.walk(top, topdown=False):
+ for name in files:
+ os.remove(os.path.join(root, name))
+ for name in dirs:
+ os.rmdir(os.path.join(root, name))
+ try:
+ os.removedirs(top)
+ except OSError:
+ pass
+
+
+class TestMercurialStorage(object):
+ def setUp(self):
+ self.repo_path = tempfile.mkdtemp()
+ self.repo = vstorage.VersionedStorage(self.repo_path)
+
+ def tearDown(self):
+ clear_directory(self.repo_path)
+
+ def test_save_text(self):
+ text = u"test text"
+ title = u"test title"
+ author = u"test author"
+ comment = u"test comment"
+ self.repo.save_text(title, text, author, comment, parent=-1)
+ saved = self.repo.open_page(title).read()
+ assert saved == text
+
+ def test_save_text_noparent(self):
+ text = u"test text"
+ title = u"test title"
+ author = u"test author"
+ comment = u"test comment"
+ self.repo.save_text(title, text, author, comment, parent=None)
+ saved = self.repo.open_page(title).read()
+ assert saved == text
+
+ def test_save_merge_no_conflict(self):
+ text = u"test\ntext"
+ title = u"test title"
+ author = u"test author"
+ comment = u"test comment"
+ self.repo.save_text(title, text, author, comment, parent=-1)
+ self.repo.save_text(title, text, author, comment, parent=-1)
+ saved = self.repo.open_page(title).read()
+ assert saved == text
+
+ def test_save_merge_line_conflict(self):
+ text = u"test\ntest\n"
+ text1 = u"test\ntext\n"
+ text2 = u"text\ntest\n"
+ title = u"test title"
+ author = u"test author"
+ comment = u"test comment"
+ self.repo.save_text(title, text, author, comment, parent=-1)
+ self.repo.save_text(title, text1, author, comment, parent=0)
+ self.repo.save_text(title, text2, author, comment, parent=0)
+ saved = self.repo.open_page(title).read()
+ # Other conflict markers placement can also be correct
+ assert_equal(saved, u'''\
+text
+test
+<<<<<<< local
+=======
+text
+>>>>>>> other
+''')
+
+ def test_delete(self):
+ text = u"text test"
+ title = u"test title"
+ author = u"test author"
+ comment = u"test comment"
+ self.repo.save_text(title, text, author, comment, parent=-1)
+ assert title in self.repo
+ self.repo.delete_page(title, author, comment)
+ assert title not in self.repo
+
+ @raises(vstorage.DocumentNotFound)
+ def test_document_not_found(self):
+ self.repo.open_page(u'unknown entity')
+
+