1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
"""Tests for the type system."""
from scss.types import Color, Null, Number, String
import pytest
# Operators: arithmetic (+ - * / %), unary (+ -), comparison (== != < > <= >=), boolean
# Types: numbers, colors, strings, booleans, lists
# Test them all!
def test_addition():
assert Number(123) + Number(456) == Number(579)
assert Number(1, "px") + Number(2, "px") == Number(3, "px")
assert Number(123) + String('abc') == String('123abc')
assert String('abc') + Number(123) == String('abc123')
ret = String('abc', quotes=None) + String('def', quotes=None)
assert ret == String('abcdef')
assert ret.quotes is None
ret = String('abc', quotes='"') + String('def', quotes=None)
assert ret == String('abcdef')
assert ret.quotes is '"'
ret = String('abc', quotes=None) + String('def', quotes='"')
assert ret == String('abcdef')
assert ret.quotes is None
assert Color.from_hex('#010305') + Color.from_hex('#050301') == Color.from_hex('#060606')
assert Color.from_name('white') + Color.from_name('white') == Color.from_name('white')
def test_subtraction():
assert Number(123) - Number(456) == Number(-333)
assert Number(456) - Number(123) == Number(333)
# TODO test that subtracting e.g. strings doesn't work
assert Color.from_hex('#0f0f0f') - Color.from_hex('#050505') == Color.from_hex('#0a0a0a')
def test_division():
assert Number(5, "px") / Number(5, "px") == Number(1)
assert Number(1, "in") / Number(6, "pt") == Number(12)
def test_comparison_numeric():
lo = Number(123)
hi = Number(456)
assert lo < hi
assert lo <= hi
assert lo <= lo
assert hi > lo
assert hi >= lo
assert hi >= hi
assert lo == lo
assert lo != hi
# Same tests, negated
assert not lo > hi
assert not lo >= hi
assert not hi < lo
assert not hi <= lo
assert not lo != lo
assert not lo == hi
def test_comparison_stringerific():
abc = String('abc')
xyz = String('xyz')
assert abc == abc
assert abc != xyz
assert not abc == xyz
assert not abc != abc
# Interaction with other types
assert Number(123) != String('123')
assert String('123') != Number(123)
# Sass strings don't support ordering
with pytest.raises(TypeError):
abc < xyz
with pytest.raises(TypeError):
abc <= xyz
with pytest.raises(TypeError):
abc > xyz
with pytest.raises(TypeError):
abc >= xyz
with pytest.raises(TypeError):
Number(123) < String('123')
def test_comparison_null():
null = Null()
assert null == null
assert null != Number(0)
with pytest.raises(TypeError):
null < null
# TODO write more! i'm lazy.
|