1import pickle 2import re 3import platform 4 5import pytest 6import cairo 7 8 9# https://bitbucket.org/pypy/pypy/issues/2742 10@pytest.mark.skipif(platform.python_implementation() == "PyPy", reason="PyPy") 11def test_type(): 12 t = cairo.Antialias 13 assert int in t.__mro__ 14 assert isinstance(t(42), int) 15 assert isinstance(t(0), int) 16 assert issubclass(t, int) 17 18 with pytest.raises(TypeError): 19 t() 20 21 with pytest.raises(TypeError): 22 t(object()) 23 24 with pytest.raises(TypeError): 25 type("foo", (t,), {}) 26 27 assert hasattr(t, "DEFAULT") 28 assert t.DEFAULT == 0 29 assert t.__name__ == "Antialias" 30 assert t.__module__ == "cairo" 31 32 assert repr(t.DEFAULT) == "cairo.Antialias.DEFAULT" 33 assert repr(t(123456)) == "123456" 34 assert repr(t(0)) == "cairo.Antialias.DEFAULT" 35 assert str(t(0)) == "0" 36 37 assert isinstance(cairo.ANTIALIAS_DEFAULT, t) 38 39 40def test_misc(): 41 cairo.Status.JBIG2_GLOBAL_MISSING 42 43 44def test_format_methods(): 45 assert cairo.Format.RGB24.stride_for_width(8) == 32 46 assert cairo.Format.stride_for_width(cairo.Format.RGB24, 8) == 32 47 48 49def test_text_cluster_flags(): 50 assert cairo.TextClusterFlags.BACKWARD == 1 51 52 53def test_surface_observer_mode(): 54 assert cairo.SurfaceObserverMode.NORMAL == 0 55 56 57def test_aliases(): 58 types_ = [ 59 cairo.Antialias, 60 cairo.Content, 61 cairo.Extend, 62 cairo.FillRule, 63 cairo.Filter, 64 cairo.FontWeight, 65 cairo.FontSlant, 66 cairo.Format, 67 cairo.HintMetrics, 68 cairo.HintStyle, 69 cairo.LineCap, 70 cairo.LineJoin, 71 cairo.Operator, 72 cairo.PathDataType, 73 cairo.RegionOverlap, 74 cairo.SubpixelOrder, 75 ] 76 77 def get_prefix(t): 78 name = t.__name__ 79 # special case.. 80 if name == "PathDataType": 81 name = "Path" 82 return"_".join([s.upper() for s in re.findall('[A-Z][^A-Z]*', name)]) 83 84 for t in types_: 85 for name in dir(t): 86 if name.upper() != name: 87 continue 88 value = getattr(t, name) 89 assert isinstance(value, t) 90 prefix = get_prefix(t) 91 assert getattr(cairo, prefix + "_" + name) == value 92 93 for name in dir(cairo): 94 for t in types_: 95 prefix = get_prefix(t) 96 if name.startswith(prefix + "_"): 97 postfix = name[len(prefix) + 1:] 98 value = getattr(cairo, name) 99 assert getattr(t, postfix) == value 100 101 # some enums are different, check manually 102 assert cairo.SVG_VERSION_1_1 == cairo.SVGVersion.VERSION_1_1 103 assert isinstance(cairo.SVG_VERSION_1_1, cairo.SVGVersion) 104 assert isinstance(cairo.SVGVersion.VERSION_1_1, cairo.SVGVersion) 105 assert cairo.SVG_VERSION_1_2 == cairo.SVGVersion.VERSION_1_2 106 assert isinstance(cairo.SVG_VERSION_1_2, cairo.SVGVersion) 107 assert isinstance(cairo.SVGVersion.VERSION_1_2, cairo.SVGVersion) 108 109 assert cairo.PDF_VERSION_1_4 == cairo.PDFVersion.VERSION_1_4 110 assert isinstance(cairo.PDF_VERSION_1_4, cairo.PDFVersion) 111 assert isinstance(cairo.PDFVersion.VERSION_1_4, cairo.PDFVersion) 112 assert cairo.PDF_VERSION_1_5 == cairo.PDFVersion.VERSION_1_5 113 assert isinstance(cairo.PDF_VERSION_1_5, cairo.PDFVersion) 114 assert isinstance(cairo.PDFVersion.VERSION_1_5, cairo.PDFVersion) 115 116 assert cairo.PS_LEVEL_2 == cairo.PSLevel.LEVEL_2 117 assert isinstance(cairo.PS_LEVEL_2, cairo.PSLevel) 118 assert isinstance(cairo.PSLevel.LEVEL_2, cairo.PSLevel) 119 assert cairo.PS_LEVEL_3 == cairo.PSLevel.LEVEL_3 120 assert isinstance(cairo.PS_LEVEL_3, cairo.PSLevel) 121 assert isinstance(cairo.PSLevel.LEVEL_3, cairo.PSLevel) 122 123 124def test_pickle(): 125 # These constants used to be plain int. Try to pickle to int so that 126 # there is no dependency on pycairo when unpickling. 127 128 value = cairo.Antialias(42) 129 new_value = pickle.loads(pickle.dumps(value)) 130 assert type(new_value) == int 131