1import sys
2
3if sys.version_info >= (3, 0):
4    '''
5    for tests that need to test long values in python 2
6
7    python 3 does not differentiate between long and int
8    and does not supply a long keyword
9
10    instead of testing longs by using values such as 10L
11    test writters should do this:
12
13    from compathelper import _long
14    _long(10)
15    '''
16    _long = int
17
18    '''
19    for tests that need to test string values in python 2
20
21    python 3 does differentiate between str and bytes
22    and does not supply a basestring keyword
23
24    any tests that use basestring should do this:
25
26    from compathelper import _basestring
27    isinstance(_basestring, "hello")
28    '''
29    _basestring = str
30
31    '''
32    for tests that need to write to intefaces that take bytes in
33    python 3
34
35    python 3 has a seperate bytes type for low level functions like os.write
36
37    python 2 treats these as strings
38
39    any tests that need to write a string of bytes should do something like
40    this:
41
42    from compathelper import _bytes
43    os.write(_bytes("hello"))
44    '''
45
46    _bytes = lambda s: s.encode()
47
48    '''
49    for tests that need to write to intefaces that take unicode in
50    python 2
51
52    python 3 strings are unicode encoded as UTF-8 so the unicode object
53    doesn't exist
54
55    python 2 differs between a string an unicode string and you must specify
56    an encoding.  This macro will specify UTF-8 in python 2
57
58    any tests that need to use unicode should do this
59
60    from compathelper import _unicode
61    unicode_string = _unicode('this is a unicode string')
62    '''
63
64    _unicode = lambda s: str(s)
65else:
66    _long = long
67    _basestring = basestring
68    _bytes = str
69    _unicode = lambda s: unicode(s, 'UTF-8')
70