vty/test/VerifySimpleSpanGeneration.hs
1{-# LANGUAGE DisambiguateRecordFields #-}
2{-# LANGUAGE NamedFieldPuns #-}
3module VerifySimpleSpanGeneration where
5import Verify.Graphics.Vty.DisplayRegion
6import Verify.Graphics.Vty.Image
7import Verify.Graphics.Vty.Picture
8import Verify.Graphics.Vty.Span
10import Graphics.Vty.Debug
11import Graphics.Vty.PictureToSpans
15import qualified Data.Vector as Vector
17unit_image_and_zero_window_0 :: UnitImage -> EmptyWindow -> Bool
18unit_image_and_zero_window_0 (UnitImage _ i) (EmptyWindow w) =
19 let p = pic_for_image i
20 ops = display_ops_for_pic p (region_for_window w)
21 in display_ops_columns ops == 0 && display_ops_rows ops == 0
23unit_image_and_zero_window_1 :: UnitImage -> EmptyWindow -> Bool
24unit_image_and_zero_window_1 (UnitImage _ i) (EmptyWindow w) =
25 let p = pic_for_image i
26 ops = display_ops_for_pic p (region_for_window w)
27 in ( span_ops_effected_rows ops == 0 ) && ( all_spans_have_width ops 0 )
29horiz_span_image_and_zero_window_0 :: SingleRowSingleAttrImage -> EmptyWindow -> Bool
30horiz_span_image_and_zero_window_0 (SingleRowSingleAttrImage { row_image = i }) (EmptyWindow w) =
31 let p = pic_for_image i
32 ops = display_ops_for_pic p (region_for_window w)
33 in display_ops_columns ops == 0 && display_ops_rows ops == 0
35horiz_span_image_and_zero_window_1 :: SingleRowSingleAttrImage -> EmptyWindow -> Bool
36horiz_span_image_and_zero_window_1 (SingleRowSingleAttrImage { row_image = i }) (EmptyWindow w) =
37 let p = pic_for_image i
38 ops = display_ops_for_pic p (region_for_window w)
39 in ( span_ops_effected_rows ops == 0 ) && ( all_spans_have_width ops 0 )
41horiz_span_image_and_equal_window_0 :: SingleRowSingleAttrImage -> Result
42horiz_span_image_and_equal_window_0 (SingleRowSingleAttrImage { row_image = i, expected_columns = c }) =
43 let p = pic_for_image i
45 ops = display_ops_for_pic p (region_for_window w)
46 in verify_all_spans_have_width i ops c
48horiz_span_image_and_equal_window_1 :: SingleRowSingleAttrImage -> Bool
49horiz_span_image_and_equal_window_1 (SingleRowSingleAttrImage { row_image = i, expected_columns = c }) =
50 let p = pic_for_image i
52 ops = display_ops_for_pic p (region_for_window w)
53 in span_ops_effected_rows ops == 1
55horiz_span_image_and_lesser_window_0 :: SingleRowSingleAttrImage -> Result
56horiz_span_image_and_lesser_window_0 (SingleRowSingleAttrImage { row_image = i, expected_columns = c }) =
57 let p = pic_for_image i
58 lesser_width = c `div` 2
59 w = MockWindow lesser_width 1
60 ops = display_ops_for_pic p (region_for_window w)
61 in verify_all_spans_have_width i ops lesser_width
63single_attr_single_span_stack_cropped_0 :: SingleAttrSingleSpanStack -> Result
64single_attr_single_span_stack_cropped_0 stack =
65 let p = pic_for_image (stack_image stack)
66 w = MockWindow (stack_width stack `div` 2) (stack_height stack)
67 ops = display_ops_for_pic p (region_for_window w)
68 in verify_all_spans_have_width (stack_image stack) ops (stack_width stack `div` 2)
70single_attr_single_span_stack_cropped_1 :: SingleAttrSingleSpanStack -> Bool
71single_attr_single_span_stack_cropped_1 stack =
72 let p = pic_for_image (stack_image stack)
73 expected_row_count = stack_height stack `div` 2
74 w = MockWindow (stack_width stack) expected_row_count
75 ops = display_ops_for_pic p (region_for_window w)
76 actual_row_count = span_ops_effected_rows ops
77 in expected_row_count == actual_row_count
79single_attr_single_span_stack_cropped_2 :: SingleAttrSingleSpanStack -> SingleAttrSingleSpanStack -> Result
80single_attr_single_span_stack_cropped_2 stack_0 stack_1 =
81 let p = pic_for_image (stack_image stack_0 <|> stack_image stack_1)
82 w = MockWindow (stack_width stack_0) (image_height (pic_image p))
83 ops = display_ops_for_pic p (region_for_window w)
84 in verify_all_spans_have_width (pic_image p) ops (stack_width stack_0)
86single_attr_single_span_stack_cropped_3 :: SingleAttrSingleSpanStack -> SingleAttrSingleSpanStack -> Bool
87single_attr_single_span_stack_cropped_3 stack_0 stack_1 =
88 let p = pic_for_image (stack_image stack_0 <|> stack_image stack_1)
89 w = MockWindow (image_width (pic_image p)) expected_row_count
90 ops = display_ops_for_pic p (region_for_window w)
91 expected_row_count = image_height (pic_image p) `div` 2
92 actual_row_count = span_ops_effected_rows ops
93 in expected_row_count == actual_row_count
95single_attr_single_span_stack_cropped_4 :: SingleAttrSingleSpanStack -> SingleAttrSingleSpanStack -> Result
96single_attr_single_span_stack_cropped_4 stack_0 stack_1 =
97 let p = pic_for_image (stack_image stack_0 <-> stack_image stack_1)
98 w = MockWindow expected_width (image_height (pic_image p))
99 ops = display_ops_for_pic p (region_for_window w)
100 expected_width = image_width (pic_image p) `div` 2
101 in verify_all_spans_have_width (pic_image p) ops expected_width
103single_attr_single_span_stack_cropped_5 :: SingleAttrSingleSpanStack -> SingleAttrSingleSpanStack -> Bool
104single_attr_single_span_stack_cropped_5 stack_0 stack_1 =
105 let p = pic_for_image (stack_image stack_0 <-> stack_image stack_1)
106 w = MockWindow (image_width (pic_image p)) (stack_height stack_0)
107 ops = display_ops_for_pic p (region_for_window w)
108 expected_row_count = stack_height stack_0
109 actual_row_count = span_ops_effected_rows ops
110 in expected_row_count == actual_row_count
112horiz_span_image_and_greater_window_0 :: SingleRowSingleAttrImage -> Result
113horiz_span_image_and_greater_window_0 (SingleRowSingleAttrImage { row_image = i, expected_columns = c }) =
114 let p = pic_for_image i
115 -- SingleRowSingleAttrImage always has width >= 1
116 greater_width = c * 2
117 w = MockWindow greater_width 1
118 ops = display_ops_for_pic p (region_for_window w)
119 in verify_all_spans_have_width i ops greater_width
121arb_image_is_cropped :: DefaultImage -> MockWindow -> Bool
122arb_image_is_cropped (DefaultImage image) win@(MockWindow w h) =
123 let pic = pic_for_image image
124 ops = display_ops_for_pic pic (region_for_window win)
125 in ( span_ops_effected_rows ops == h ) && ( all_spans_have_width ops w )
127span_ops_actually_fill_rows :: DefaultPic -> Bool
128span_ops_actually_fill_rows (DefaultPic pic win) =
129 let ops = display_ops_for_pic pic (region_for_window win)
130 expected_row_count = region_height (region_for_window win)
131 actual_row_count = span_ops_effected_rows ops
132 in expected_row_count == actual_row_count
134span_ops_actually_fill_columns :: DefaultPic -> Bool
135span_ops_actually_fill_columns (DefaultPic pic win) =
136 let ops = display_ops_for_pic pic (region_for_window win)
137 expected_column_count = region_width (region_for_window win)
138 in all_spans_have_width ops expected_column_count
140first_span_op_sets_attr :: DefaultPic -> Bool
141first_span_op_sets_attr DefaultPic { default_pic = pic, default_win = win } =
142 let ops = display_ops_for_pic pic (region_for_window win)
143 in all ( is_attr_span_op . Vector.head ) ( Vector.toList ops )
145single_attr_single_span_stack_op_coverage :: SingleAttrSingleSpanStack -> Result
146single_attr_single_span_stack_op_coverage stack =
147 let p = pic_for_image (stack_image stack)
148 w = MockWindow (stack_width stack) (stack_height stack)
149 ops = display_ops_for_pic p (region_for_window w)
150 in verify_all_spans_have_width (stack_image stack) ops (stack_width stack)
152image_coverage_matches_bounds :: Image -> Result
153image_coverage_matches_bounds i =
154 let p = pic_for_image i
155 r = DisplayRegion (image_width i) (image_height i)
156 ops = display_ops_for_pic p r
157 in verify_all_spans_have_width i ops (image_width i)
161 [ verify "unit image is cropped when window size == (0,0) [0]" unit_image_and_zero_window_0
162 , verify "unit image is cropped when window size == (0,0) [1]" unit_image_and_zero_window_1
163 , verify "horiz span image is cropped when window size == (0,0) [0]" horiz_span_image_and_zero_window_0
164 , verify "horiz span image is cropped when window size == (0,0) [1]" horiz_span_image_and_zero_window_1
165 , verify "horiz span image is not cropped when window size == size of image [width]" horiz_span_image_and_equal_window_0
166 , verify "horiz span image is not cropped when window size == size of image [height]" horiz_span_image_and_equal_window_1
167 , verify "horiz span image is not cropped when window size < size of image [width]" horiz_span_image_and_lesser_window_0
168 , verify "horiz span image is not cropped when window size > size of image [width]" horiz_span_image_and_greater_window_0
169 , verify "first span op is always to set the text attribute" first_span_op_sets_attr
170 , verify "a stack of single attr text spans should define content for all the columns [output region == size of stack]"
171 single_attr_single_span_stack_op_coverage
172 , verify "a single attr text span is cropped when window size < size of stack image [width]"
173 single_attr_single_span_stack_cropped_0
174 , verify "a single attr text span is cropped when window size < size of stack image [height]"
175 single_attr_single_span_stack_cropped_1
176 , verify "single attr text span <|> single attr text span display cropped. [width]"
177 single_attr_single_span_stack_cropped_2
178 , verify "single attr text span <|> single attr text span display cropped. [height]"
179 single_attr_single_span_stack_cropped_3
180 , verify "single attr text span <-> single attr text span display cropped. [width]"
181 single_attr_single_span_stack_cropped_4
182 , verify "single attr text span <-> single attr text span display cropped. [height]"
183 single_attr_single_span_stack_cropped_5
184 , verify "an arbitrary image when rendered to a window of the same size will cover the entire window"
185 image_coverage_matches_bounds
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list