1##############################################################################
2#
3# Copyright (c) 2010 Zope Foundation and Contributors.
4# All Rights Reserved.
5#
6# This software is subject to the provisions of the Zope Public License,
7# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
8# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
9# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
10# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
11# FOR A PARTICULAR PURPOSE.
12#
13##############################################################################
14import unittest
15
16from BTrees import fsBTree
17from ._test_builder import update_module
18
19class fsBucketTests(unittest.TestCase):
20
21    def _getTargetClass(self):
22        return fsBTree.fsBucket
23
24    def _makeOne(self, *args, **kw):
25        return self._getTargetClass()(*args, **kw)
26
27    def _makeBytesItems(self):
28        from .._compat import _ascii
29        return[(_ascii(c*2), _ascii(c*6)) for c in 'abcdef']
30
31    def test_toString(self):
32        bucket = self._makeOne(self._makeBytesItems())
33        self.assertEqual(bucket.toString(),
34                         b'aabbccddeeffaaaaaabbbbbbccccccddddddeeeeeeffffff')
35
36    def test_fromString(self):
37        before = self._makeOne(self._makeBytesItems())
38        after = before.fromString(before.toString())
39        self.assertEqual(before.__getstate__(), after.__getstate__())
40
41    def test_fromString_empty(self):
42        before = self._makeOne(self._makeBytesItems())
43        after = before.fromString(b'')
44        self.assertEqual(after.__getstate__(), ((),))
45
46    def test_fromString_invalid_length(self):
47        bucket = self._makeOne(self._makeBytesItems())
48        self.assertRaises(ValueError, bucket.fromString, b'xxx')
49
50
51
52class fsBucketPyTests(fsBucketTests):
53
54    def _getTargetClass(self):
55        return fsBTree.fsBucketPy
56
57class fsTreeTests(unittest.TestCase):
58
59    def _check_sizes(self, cls):
60        self.assertEqual(cls.max_leaf_size, 500)
61        self.assertEqual(cls.max_internal_size, 500)
62
63    def test_BTree_sizes(self):
64        self._check_sizes(fsBTree.BTree)
65        self._check_sizes(fsBTree.BTreePy)
66
67    def test_TreeSet_sizes(self):
68        self._check_sizes(fsBTree.TreeSet)
69        self._check_sizes(fsBTree.TreeSetPy)
70
71update_module(globals(), fsBTree)
72