@@ -10,7 +10,6 @@ module Testable.Element exposing
16 , expectRoundedEquality
15 , expectRoundedEquality
@@ -21,7 +20,6 @@ module Testable.Element exposing
21 , isVisible
20 , isVisible
27 , moveDown
25 , moveDown
@@ -38,14 +36,10 @@ module Testable.Element exposing
47 , textColumn
42 , textColumn
49 , transparent
43 , transparent
@@ -64,21 +58,17 @@ In order to run the test:
65import Dict
59import Dict
66import Element
60import Element
67import Html.Attributes
62import Html.Attributes
68import Testable
63import Testable
69import Testable.Runner
64import Testable.Runner
72−{-| This is used when we want to run all tests in a test suite instead of one at a time.
74−toProgram : Testable.Runner.Testable -> Testable.Runner.TestableProgram
76− Testable.Runner.program [ testable ]
79−layout : List (Testable.Attr msg) -> Testable.Element Testable.Runner.Msg -> Testable.Runner.Testable
67+layout : List (Testable.Attr msg) -> Testable.Element Testable.Runner.Msg -> Testable.Runner.TestableProgram
80layout attrs elem =
68layout attrs elem =
81− Testable.Runner.testable "Test" elem
69+ Testable.Runner.program
70+ [ ( "Open Case", elem )
84text : String -> Testable.Element msg
74text : String -> Testable.Element msg
@@ -87,18 +77,18 @@ text =
89el : List (Testable.Attr msg) -> Testable.Element msg -> Testable.Element msg
79el : List (Testable.Attr msg) -> Testable.Element msg -> Testable.Element msg
91− Testable.El (implicitWidthHeightShrink attrs)
81+ Testable.El
94row : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
84row : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
96− Testable.Row (implicitWidthHeightShrink attrs)
86+ Testable.Row
99column : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
89column : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
100−column attrs =
90+column =
101− Testable.Column (implicitWidthHeightShrink attrs)
91+ Testable.Column
104none : Testable.Element msg
94none : Testable.Element msg
@@ -107,60 +97,13 @@ none =
109paragraph : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
99paragraph : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
110−paragraph attrs =
100+paragraph =
113− implicitTest (widthHelper Nothing Nothing (Fill 1))
114− :: implicitTest (heightHelper Nothing Nothing Shrink)
117− Testable.Paragraph (skipOverridden withImplicits)
101+ Testable.Paragraph
120textColumn : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
104textColumn : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
121−textColumn attrs =
105+textColumn =
124− implicitTest (widthHelper (Just 500) (Just 750) (Fill 1))
125− :: implicitTest (heightHelper Nothing Nothing Shrink)
128− Testable.TextColumn (skipOverridden withImplicits)
106+ Testable.TextColumn
132− List (Testable.Attr msg)
135− , label : Testable.Element msg
137− -> Testable.Element msg
139− Testable.Link details.url
140− (implicitWidthHeightShrink attrs)
145− Testable.Attr Element.clip
149−scrollbars : Testable.Attr msg
151− Testable.Attr Element.scrollbars
155−scrollbarY : Testable.Attr msg
157− Testable.Attr Element.scrollbarY
161−scrollbarX : Testable.Attr msg
163− Testable.Attr Element.scrollbarX
166{-| Old labeling mechanism that i removed to hastily
109{-| Old labeling mechanism that i removed to hastily
@@ -239,7 +182,6 @@ transparent on =
241 , attr = Element.transparent on
184 , attr = Element.transparent on
242− , id = Testable.NoId
244 \context ->
186 \context ->
@@ -262,9 +204,9 @@ transparent on =
263isVisible : Testable.Attr msg
205isVisible : Testable.Attr msg
264isVisible =
206isVisible =
265− Testable.AttrTest
207+ Testable.LabeledTest
266 { label = "is-visible"
208 { label = "is-visible"
267− , id = Testable.NoId
209+ , attr = Element.htmlAttribute (Html.Attributes.style "not" "applicable")
269 \context ->
211 \context ->
270 [ Testable.equal context.self.isVisible True ]
212 [ Testable.equal context.self.isVisible True ]
@@ -277,7 +219,6 @@ alpha a =
277 Testable.LabeledTest
219 Testable.LabeledTest
278 { label = "alpha-" ++ String.fromFloat a
220 { label = "alpha-" ++ String.fromFloat a
279 , attr = Element.alpha a
221 , attr = Element.alpha a
280− , id = Testable.NoId
282 \context ->
223 \context ->
@@ -296,7 +237,6 @@ padding pad =
296 Testable.LabeledTest
237 Testable.LabeledTest
297 { label = "padding " ++ String.fromInt pad
238 { label = "padding " ++ String.fromInt pad
298 , attr = Element.padding pad
239 , attr = Element.padding pad
299− , id = Testable.NoId
301 \found ->
241 \found ->
302 [ Testable.true ("Padding " ++ String.fromInt pad ++ " is present")
242 [ Testable.true ("Padding " ++ String.fromInt pad ++ " is present")
@@ -317,7 +257,6 @@ paddingXY x y =
317 Testable.LabeledTest
257 Testable.LabeledTest
318 { label = "paddingXY " ++ String.fromInt x ++ ", " ++ String.fromInt y
258 { label = "paddingXY " ++ String.fromInt x ++ ", " ++ String.fromInt y
319 , attr = Element.paddingXY x y
259 , attr = Element.paddingXY x y
320− , id = Testable.NoId
322 \found ->
261 \found ->
323 [ Testable.true ("PaddingXY (" ++ String.fromInt x ++ ", " ++ String.fromInt y ++ ") is present")
262 [ Testable.true ("PaddingXY (" ++ String.fromInt x ++ ", " ++ String.fromInt y ++ ") is present")
@@ -334,11 +273,6 @@ paddingXY x y =
338− List.filter Tuple.first ls
339− |> List.map Tuple.second
342widthHelper maybeMin maybeMax len =
276widthHelper maybeMin maybeMax len =
344 addMin l =
278 addMin l =
@@ -398,7 +332,6 @@ widthHelper maybeMin maybeMax len =
398 -- Pixel values should ignore min and max?
332 -- Pixel values should ignore min and max?
399 Testable.LabeledTest
333 Testable.LabeledTest
400 { label = "width " ++ String.fromInt val ++ "px" ++ minLabel ++ maxLabel
334 { label = "width " ++ String.fromInt val ++ "px" ++ minLabel ++ maxLabel
401− , id = Testable.IsWidth
403 Element.width
336 Element.width
404 (Element.px val
337 (Element.px val
@@ -407,10 +340,7 @@ widthHelper maybeMin maybeMax len =
409 \found ->
342 \found ->
410− [ expectRoundedEquality
411− { expected = toFloat val
412− , found = found.self.bbox.width
343+ [ Testable.true "exact width is exact" (floor found.self.bbox.width == val)
414 , Testable.true "min/max is upheld" (minMaxTest (floor found.self.bbox.width))
344 , Testable.true "min/max is upheld" (minMaxTest (floor found.self.bbox.width))
@@ -423,7 +353,6 @@ widthHelper maybeMin maybeMax len =
425 "width fill-" ++ String.fromInt portion ++ minLabel ++ maxLabel
355 "width fill-" ++ String.fromInt portion ++ minLabel ++ maxLabel
426− , id = Testable.IsWidth
428 Element.width
357 Element.width
429 (Element.fillPortion portion
358 (Element.fillPortion portion
@@ -432,7 +361,7 @@ widthHelper maybeMin maybeMax len =
434 \context ->
363 \context ->
435− if List.member context.parentLayout [ Testable.IsNearby Testable.OnRight, Testable.IsNearby Testable.OnLeft ] then
364+ if List.member context.location [ Testable.IsNearby Testable.OnRight, Testable.IsNearby Testable.OnLeft ] then
436 [ Testable.true "width fill doesn't apply to onright/onleft elements" True ]
365 [ Testable.true "width fill doesn't apply to onright/onleft elements" True ]
@@ -440,93 +369,33 @@ widthHelper maybeMin maybeMax len =
440 parentAvailableWidth =
369 parentAvailableWidth =
441 context.parent.bbox.width - (context.self.bbox.padding.left + context.self.bbox.padding.right)
370 context.parent.bbox.width - (context.self.bbox.padding.left + context.self.bbox.padding.right)
444− [ case context.parentLayout of
372+ [ case context.location of
445− Testable.IsNearby _ ->
373+ Testable.IsNearby _ ->
446− [ Testable.true "Nearby Element has fill width"
374+ Testable.true "Nearby Element has fill width"
447− ((floor context.parent.bbox.width == floor context.self.bbox.width)
375+ ((floor context.parent.bbox.width == floor context.self.bbox.width)
448− || minMaxTest (floor context.self.bbox.width)
376+ || minMaxTest (floor context.self.bbox.width)
452− Testable.InColumn ->
379+ Testable.InColumn ->
453− [ Testable.true "Element within column has fill width"
380+ Testable.true "Element within column has fill width"
454− ((floor parentAvailableWidth == floor context.self.bbox.width)
381+ ((floor parentAvailableWidth == floor context.self.bbox.width)
455− || minMaxTest (floor context.self.bbox.width)
382+ || minMaxTest (floor context.self.bbox.width)
459− Testable.InEl ->
385+ Testable.InEl ->
460− [ Testable.true "Element within element has fill width" <|
386+ Testable.true "Element within element has fill width" <|
461− (floor parentAvailableWidth == floor context.self.bbox.width)
387+ (floor parentAvailableWidth == floor context.self.bbox.width)
462− || minMaxTest (floor context.self.bbox.width)
388+ || minMaxTest (floor context.self.bbox.width)
467− spacePerPortion =
392+ spacePerPortion =
468− parentAvailableWidth / toFloat (List.length context.siblings + 1)
393+ parentAvailableWidth / toFloat (List.length context.siblings + 1)
470− [ Testable.true "element has fill width" <|
395+ Testable.true "element has fill width" <|
471− (floor spacePerPortion == floor context.self.bbox.width)
396+ (floor spacePerPortion == floor context.self.bbox.width)
472− || minMaxTest (floor context.self.bbox.width)
397+ || minMaxTest (floor context.self.bbox.width)
474− , [ Testable.lessThanOrEqual "not larger than parent"
475− context.self.bbox.width
476− context.parent.bbox.width
478− , case context.selfElement of
479− Testable.Paragraph _ _ ->
480− -- A paragraph with width fill
481− -- we want to test for correct text wrapping here.
489− |> List.map childWidth
490− |> List.append (List.map .width context.self.textMetrics)
494− context.self.bbox.padding.left + context.self.bbox.padding.right
496− totalCalculatedWidth =
497− totalChildren + horizontalPadding
500− if boxChildrenHeight > 20 then
501− ceiling (boxChildrenHeight / 20)
504− ceiling (totalCalculatedWidth / context.self.bbox.width)
514− [ Testable.true "text wrapping, checking height"
515− -- all we're doing here is testing if wrapping is occurring
516− -- not the exact height, which is a little tricky to calculate perfectly without more information.
517− (if expectedLines > 1 then
518− context.self.bbox.height >= (20 * 2)
521− -- then it's less than 2 ~ line heights
522− -- there's some weird variance here which makes it hard to be exact.
523− context.self.bbox.height < (20 * 2)
532 Shrink ->
401 Shrink ->
@@ -538,211 +407,33 @@ widthHelper maybeMin maybeMax len =
538 |> addMin
407 |> addMin
539 |> addMax
408 |> addMax
541− , id = Testable.IsWidth
543 \context ->
411 \context ->
544− case context.selfElement of
552− |> List.map childWidth
553− |> List.append (List.map .width context.self.textMetrics)
557− context.self.bbox.padding.left + context.self.bbox.padding.right
560− [ ( (context.parentLayout /= Testable.InParagraph)
561− && (context.parentLayout /= Testable.InTextCol)
562− , Testable.rounded "equals children"
563− { expected = totalChildren + horizontalPadding
564− , found = context.self.bbox.width
567− , ( context.parentLayout /= Testable.AtRoot
568− , Testable.lessThanOrEqual "not larger than parent"
569− context.self.bbox.width
570− context.parent.bbox.width
574− Testable.Link _ _ _ ->
576− childWidth child =
413+ childWidth child =
577− child.bbox.width
414+ -- TODO: add margin values to widths
581− |> List.map childWidth
582− |> List.append (List.map .width context.self.textMetrics)
586− context.self.bbox.padding.left + context.self.bbox.padding.right
589− [ ( (context.parentLayout /= Testable.InParagraph)
590− && (context.parentLayout /= Testable.InTextCol)
591− , Testable.rounded "equals children"
592− { expected = totalChildren + horizontalPadding
593− , found = context.self.bbox.width
596− , ( context.parentLayout /= Testable.AtRoot
597− , Testable.lessThanOrEqual "not larger than parent"
598− context.self.bbox.width
599− context.parent.bbox.width
603− Testable.Row rowAttrs _ ->
604− -- width of row is the sum of all children widths
605− -- both text elements and others.
608− child.bbox.width
415+ child.bbox.width
610− totalChildren =
417+ totalChildren =
611− context.children
418+ context.children
612− |> List.map childWidth
419+ |> List.map childWidth
613− |> List.append (List.map .width context.self.textMetrics)
614− |> List.sum
420+ |> List.sum
616− horizontalPadding =
422+ horizontalPadding =
617− context.self.bbox.padding.left + context.self.bbox.padding.right
423+ context.self.bbox.padding.left + context.self.bbox.padding.right
619− spacingAmount =
425+ spacingValue =
620− Testable.getSpacingFromAttributes rowAttrs
623− toFloat spacingAmount * (toFloat (List.length context.children) - 1)
426+ toFloat context.parentSpacing * (toFloat (List.length context.children) - 1)
625− listIf
428+ if totalChildren == 0 then
626− [ ( True
429+ -- TODO: The issue is that we have a hard time measuring `text` elements
627− , expectRoundedEquality
430+ -- So if a element has a text child, then it's width isn't going to show up in the system.
628− { expected = totalChildren + horizontalPadding + totalSpacing
431+ [ expectRoundedEquality context.self.bbox.width context.self.bbox.width ]
629− , found = context.self.bbox.width
632− , ( context.parentLayout /= Testable.AtRoot
633− , Testable.lessThanOrEqual "not larger than parent"
634− context.self.bbox.width
635− context.parent.bbox.width
639− Testable.Column _ _ ->
640− -- The width of the column is the width of the widest child.
644− + context.self.bbox.padding.left
645− + context.self.bbox.padding.right
651− + context.self.bbox.padding.left
652− + context.self.bbox.padding.right
654− context.self.textMetrics
658− |> List.map childWidth
659− |> List.append textChildren
663− , expectRoundedEquality
664− { expected = Maybe.withDefault 0 (List.maximum allChildren)
665− , found = context.self.bbox.width
668− , ( context.parentLayout /= Testable.AtRoot
669− , Testable.lessThanOrEqual "not larger than parent"
670− context.self.bbox.width
671− context.parent.bbox.width
675− Testable.TextColumn _ _ ->
676− -- The width of the column is the width of the widest child.
680− + context.self.bbox.padding.left
681− + context.self.bbox.padding.right
687− + context.self.bbox.padding.left
688− + context.self.bbox.padding.right
690− context.self.textMetrics
694− |> List.map childWidth
695− |> List.append textChildren
699− , expectRoundedEquality
700− { expected = Maybe.withDefault 0 (List.maximum allChildren)
701− , found = context.self.bbox.width
704− , ( context.parentLayout /= Testable.AtRoot
705− , Testable.lessThanOrEqual "not larger than parent"
706− context.self.bbox.width
707− context.parent.bbox.width
711− Testable.Paragraph _ _ ->
433+ else
712− -- This should be the size it's text,
434+ -- This fails if this element is actually a column
713− -- unless it takes up all available space, in which case it should wrap.
435+ -- So we need to capture what this element is in order to do this calculation.
720− |> List.map childWidth
721− |> List.append (List.map .width context.self.textMetrics)
725− context.self.bbox.padding.left + context.self.bbox.padding.right
729− , expectRoundedEquality
730− { expected = totalChildren + horizontalPadding
436+ [ expectRoundedEquality (totalChildren + horizontalPadding + spacingValue) context.self.bbox.width ]
731− , found = context.self.bbox.width
734− , ( context.parentLayout /= Testable.AtRoot
735− , Testable.lessThanOrEqual "not larger than parent"
736− context.self.bbox.width
737− context.parent.bbox.width
@@ -811,13 +502,10 @@ heightHelper maybeMin maybeMax len =
811 |> addMin
502 |> addMin
812 |> addMax
503 |> addMax
814− , id = Testable.IsHeight
816 \found ->
506 \found ->
817− [ expectRoundedEquality
507+ [ Testable.true ("exact height is exact: " ++ String.fromInt (floor found.self.bbox.height) ++ "," ++ String.fromInt val)
818− { expected = toFloat val
819− , found = found.self.bbox.height
508+ (floor found.self.bbox.height == val)
821 , Testable.true "min/max holds true"
509 , Testable.true "min/max holds true"
822 (minMaxTest (floor found.self.bbox.height))
510 (minMaxTest (floor found.self.bbox.height))
@@ -832,10 +520,9 @@ heightHelper maybeMin maybeMax len =
832 |> addMin
520 |> addMin
833 |> addMax
521 |> addMax
835− , id = Testable.IsHeight
837 \context ->
524 \context ->
838− [ if List.member context.parentLayout [ Testable.IsNearby Testable.Above, Testable.IsNearby Testable.Below ] then
525+ [ if List.member context.location [ Testable.IsNearby Testable.Above, Testable.IsNearby Testable.Below ] then
839 Testable.true "height fill doesn't apply to above/below elements" True
526 Testable.true "height fill doesn't apply to above/below elements" True
@@ -843,7 +530,7 @@ heightHelper maybeMin maybeMax len =
843 parentAvailableHeight =
530 parentAvailableHeight =
844 context.parent.bbox.height - (context.self.bbox.padding.top + context.self.bbox.padding.bottom)
531 context.parent.bbox.height - (context.self.bbox.padding.top + context.self.bbox.padding.bottom)
846− case context.parentLayout of
533+ case context.location of
847 Testable.IsNearby _ ->
534 Testable.IsNearby _ ->
848 Testable.true "Nearby Element has fill height"
535 Testable.true "Nearby Element has fill height"
849 ((floor context.parent.bbox.height == floor context.self.bbox.height)
536 ((floor context.parent.bbox.height == floor context.self.bbox.height)
@@ -881,134 +568,33 @@ heightHelper maybeMin maybeMax len =
881 |> addMin
568 |> addMin
882 |> addMax
569 |> addMax
884− , id = Testable.IsHeight
886 \context ->
572 \context ->
887− case context.selfElement of
890− childHeight child =
574+ childWidth child =
575+ -- TODO: add margin values to heights
891− child.bbox.height
576+ child.bbox.height
893− if List.isEmpty context.children then
578+ totalChildren =
894− -- context.self.textMetrics
579+ context.children
895− -- |> List.map Testable.textHeight
580+ |> List.map childWidth
896− -- |> List.sum
581+ |> List.sum
897− -- TODO: apparently the font metrics we have are for the literal characters rendered
582+
898− -- not for the font itself.
583+ verticalPadding =
899− [ Testable.todo "calculate height from actual text metrics"
584+ context.self.bbox.padding.top + context.self.bbox.padding.bottom
902− else
587+ toFloat context.parentSpacing * (toFloat (List.length context.children) - 1)
589+ if totalChildren == 0 then
590+ -- TODO: The issue is that we have a hard time measuring `text` elements
591+ -- So if a element has a text child, then it's height isn't going to show up in the system.
903− [ expectRoundedEquality
592+ [ expectRoundedEquality context.self.bbox.height context.self.bbox.height ]
906− |> List.map childHeight
908− |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
909− , found = context.self.bbox.height
911− , Testable.lessThanOrEqual "not larger than parent"
912− context.self.bbox.height
913− context.parent.bbox.height
916− Testable.Link _ _ _ ->
594+ else
917− let
595+ -- This fails if this element is actually a column
918− childHeight child =
596+ -- So we need to capture what this element is in order to do this calculation.
921− if List.isEmpty context.children then
922− -- context.self.textMetrics
923− -- |> List.map Testable.textHeight
925− -- TODO: apparently the font metrics we have are for the literal characters rendered
926− -- not for the font itself.
927− [ Testable.todo "calculate height from actual text metrics"
931− [ expectRoundedEquality
597+ [ expectRoundedEquality (totalChildren + verticalPadding + spacingValue) context.self.bbox.height ]
934− |> List.map childHeight
936− |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
937− , found = context.self.bbox.height
939− , Testable.lessThanOrEqual "not larger than parent"
940− context.self.bbox.height
941− context.parent.bbox.height
949− if List.isEmpty context.children then
950− -- context.self.textMetrics
951− -- |> List.map Testable.textHeight
953− -- TODO: apparently the font metrics we have are for the literal characters rendered
954− -- not for the font itself.
955− [ Testable.todo "calculate height from actual text metrics" ]
958− [ expectRoundedEquality
961− |> List.map childHeight
963− |> Maybe.withDefault 0
964− |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
965− , found = context.self.bbox.height
967− , Testable.lessThanOrEqual "not larger than parent"
968− context.self.bbox.height
969− context.parent.bbox.height
972− Testable.Column colAttrs _ ->
979− |> List.map childHeight
980− |> List.append (List.map Testable.textHeight context.self.textMetrics)
984− context.self.bbox.padding.top + context.self.bbox.padding.bottom
987− Testable.getSpacingFromAttributes colAttrs
990− toFloat spacingAmount * (toFloat (List.length context.children) - 1)
992− [ expectRoundedEquality
993− { expected = totalChildren + verticalPadding + totalSpacing
994− , found = context.self.bbox.height
996− , Testable.lessThanOrEqual "not larger than parent"
997− context.self.bbox.height
998− context.parent.bbox.height
1001− Testable.TextColumn _ _ ->
1004− Testable.Paragraph _ _ ->
@@ -1029,7 +615,6 @@ spacing space =
1029 , Testable.LabeledTest
615 , Testable.LabeledTest
1030 { label = "spacing: " ++ String.fromInt space
616 { label = "spacing: " ++ String.fromInt space
1031 , attr = Element.spacing space
617 , attr = Element.spacing space
1032− , id = Testable.NoId
1033 , test =
618 , test =
1034 \found ->
619 \found ->
@@ -1108,14 +693,13 @@ alignLeft =
1108 Testable.LabeledTest
693 Testable.LabeledTest
1109 { label = "alignLeft"
694 { label = "alignLeft"
1110 , attr = Element.alignLeft
695 , attr = Element.alignLeft
1111− , id = Testable.NoId
1112 , test =
696 , test =
1113 \found ->
697 \found ->
1114− [ if List.member found.parentLayout [ Testable.IsNearby Testable.OnLeft, Testable.IsNearby Testable.OnRight ] then
698+ [ if List.member found.location [ Testable.IsNearby Testable.OnLeft, Testable.IsNearby Testable.OnRight ] then
1115 Testable.true "alignLeft doesn't apply to elements that are onLeft or onRight" True
699 Testable.true "alignLeft doesn't apply to elements that are onLeft or onRight" True
1118− List.member found.parentLayout
702+ List.member found.location
1119 [ Testable.IsNearby Testable.InFront
703 [ Testable.IsNearby Testable.InFront
1120 , Testable.IsNearby Testable.Behind
704 , Testable.IsNearby Testable.Behind
1121 , Testable.IsNearby Testable.Above
705 , Testable.IsNearby Testable.Above
@@ -1123,18 +707,16 @@ alignLeft =
1125 expectRoundedEquality
709 expectRoundedEquality
1126− { found = found.self.bbox.left
710+ found.self.bbox.left
1127− , expected = found.parent.bbox.left
711+ found.parent.bbox.left
1130 else if List.length found.siblings == 0 then
713 else if List.length found.siblings == 0 then
1131 expectRoundedEquality
714 expectRoundedEquality
1132− { found = found.self.bbox.left
715+ found.self.bbox.left
1133− , expected = found.parent.bbox.left + found.parent.bbox.padding.left
716+ (found.parent.bbox.left + found.parent.bbox.padding.left)
1137− case found.parentLayout of
719+ case found.location of
1138 Testable.InRow ->
720 Testable.InRow ->
1140 siblingsOnLeft =
722 siblingsOnLeft =
@@ -1149,15 +731,13 @@ alignLeft =
1149 |> List.sum
731 |> List.sum
1151 expectRoundedEquality
733 expectRoundedEquality
1152− { found = found.self.bbox.left
734+ found.self.bbox.left
1153− , expected = found.parent.bbox.left + (found.parent.bbox.padding.left + widthsOnLeft + spacings)
735+ (found.parent.bbox.left + (found.parent.bbox.padding.left + widthsOnLeft + spacings))
1157 expectRoundedEquality
738 expectRoundedEquality
1158− { found = found.self.bbox.left
739+ found.self.bbox.left
1159− , expected = found.parent.bbox.left + found.parent.bbox.padding.left
740+ (found.parent.bbox.left + found.parent.bbox.padding.left)
@@ -1168,7 +748,6 @@ centerX =
1168 Testable.LabeledTest
748 Testable.LabeledTest
1169 { label = "centerX"
749 { label = "centerX"
1170 , attr = Element.centerX
750 , attr = Element.centerX
1171− , id = Testable.NoId
1172 , test =
751 , test =
1173 \found ->
752 \found ->
@@ -1180,18 +759,17 @@ centerX =
1180 parentCenter =
759 parentCenter =
1181 found.parent.bbox.left + (found.parent.bbox.width / 2)
760 found.parent.bbox.left + (found.parent.bbox.width / 2)
1183− if List.member found.parentLayout [ Testable.IsNearby Testable.OnRight, Testable.IsNearby Testable.OnLeft ] then
762+ if List.member found.location [ Testable.IsNearby Testable.OnRight, Testable.IsNearby Testable.OnLeft ] then
1184 [ Testable.true "centerX doesn't apply to elements that are onLeft or onRight" True ]
763 [ Testable.true "centerX doesn't apply to elements that are onLeft or onRight" True ]
1186 else if List.length found.siblings == 0 then
765 else if List.length found.siblings == 0 then
1187 [ expectRoundedEquality
766 [ expectRoundedEquality
1188− { found = selfCenter
767+ selfCenter
1189− , expected = parentCenter
768+ parentCenter
1194− case found.parentLayout of
772+ case found.location of
1195 Testable.InRow ->
773 Testable.InRow ->
1197 siblingsOnLeft =
775 siblingsOnLeft =
@@ -1222,17 +800,12 @@ centerX =
1224 [ expectRoundedEquality
802 [ expectRoundedEquality
1225− { found = selfCenter
803+ selfCenter
1226− , expected = expectedCenter
804+ expectedCenter
1231− [ expectRoundedEquality
808+ [ expectRoundedEquality selfCenter parentCenter ]
1232− { found = selfCenter
1233− , expected = parentCenter
@@ -1242,14 +815,13 @@ alignRight =
1242 Testable.LabeledTest
815 Testable.LabeledTest
1243 { label = "alignRight"
816 { label = "alignRight"
1244 , attr = Element.alignRight
817 , attr = Element.alignRight
1245− , id = Testable.NoId
1246 , test =
818 , test =
1247 \found ->
819 \found ->
1248− if List.member found.parentLayout [ Testable.IsNearby Testable.OnLeft, Testable.IsNearby Testable.OnRight ] then
820+ if List.member found.location [ Testable.IsNearby Testable.OnLeft, Testable.IsNearby Testable.OnRight ] then
1249 [ Testable.true "alignRight doesn't apply to elements that are onLeft or onRight" True ]
821 [ Testable.true "alignRight doesn't apply to elements that are onLeft or onRight" True ]
1252− List.member found.parentLayout
824+ List.member found.location
1253 [ Testable.IsNearby Testable.InFront
825 [ Testable.IsNearby Testable.InFront
1254 , Testable.IsNearby Testable.Behind
826 , Testable.IsNearby Testable.Behind
1255 , Testable.IsNearby Testable.Above
827 , Testable.IsNearby Testable.Above
@@ -1257,20 +829,18 @@ alignRight =
1259 [ expectRoundedEquality
831 [ expectRoundedEquality
1260− { found = found.self.bbox.right
832+ found.self.bbox.right
1261− , expected = found.parent.bbox.right
833+ found.parent.bbox.right
1265 else if List.length found.siblings == 0 then
836 else if List.length found.siblings == 0 then
1266 [ expectRoundedEquality
837 [ expectRoundedEquality
1267− { found = found.self.bbox.right
838+ found.self.bbox.right
1268− , expected = found.parent.bbox.right + found.parent.bbox.padding.right
839+ (found.parent.bbox.right + found.parent.bbox.padding.right)
1273− case found.parentLayout of
843+ case found.location of
1274 Testable.InRow ->
844 Testable.InRow ->
1276 siblingsOnRight =
846 siblingsOnRight =
@@ -1285,16 +855,14 @@ alignRight =
1285 |> List.sum
855 |> List.sum
1287 [ expectRoundedEquality
857 [ expectRoundedEquality
1288− { found = found.self.bbox.right
858+ found.self.bbox.right
1289− , expected = found.parent.bbox.right - (found.parent.bbox.padding.right + widthsOnRight + spacings)
859+ (found.parent.bbox.right - (found.parent.bbox.padding.right + widthsOnRight + spacings))
1294 [ expectRoundedEquality
863 [ expectRoundedEquality
1295− { found = found.self.bbox.right
864+ found.self.bbox.right
1296− , expected = found.parent.bbox.right + found.parent.bbox.padding.right
865+ (found.parent.bbox.right + found.parent.bbox.padding.right)
@@ -1305,14 +873,13 @@ alignTop =
1305 Testable.LabeledTest
873 Testable.LabeledTest
1306 { label = "alignTop"
874 { label = "alignTop"
1307 , attr = Element.alignTop
875 , attr = Element.alignTop
1308− , id = Testable.NoId
1309 , test =
876 , test =
1310 \found ->
877 \found ->
1311− if List.member found.parentLayout [ Testable.IsNearby Testable.Above, Testable.IsNearby Testable.Below ] then
878+ if List.member found.location [ Testable.IsNearby Testable.Above, Testable.IsNearby Testable.Below ] then
1312 [ Testable.true "alignTop doesn't apply to elements that are above or below" True ]
879 [ Testable.true "alignTop doesn't apply to elements that are above or below" True ]
1315− List.member found.parentLayout
882+ List.member found.location
1316 [ Testable.IsNearby Testable.InFront
883 [ Testable.IsNearby Testable.InFront
1317 , Testable.IsNearby Testable.Behind
884 , Testable.IsNearby Testable.Behind
1318 , Testable.IsNearby Testable.OnRight
885 , Testable.IsNearby Testable.OnRight
@@ -1320,20 +887,18 @@ alignTop =
1322 [ expectRoundedEquality
889 [ expectRoundedEquality
1323− { found = found.self.bbox.top
890+ found.self.bbox.top
1324− , expected = found.parent.bbox.top
891+ found.parent.bbox.top
1328 else if List.length found.siblings == 0 then
894 else if List.length found.siblings == 0 then
1329 [ expectRoundedEquality
895 [ expectRoundedEquality
1330− { found = found.self.bbox.top
896+ found.self.bbox.top
1331− , expected = found.parent.bbox.top + found.parent.bbox.padding.top
897+ (found.parent.bbox.top + found.parent.bbox.padding.top)
1336− case found.parentLayout of
901+ case found.location of
1337 Testable.InColumn ->
902 Testable.InColumn ->
1339 siblingsAbove =
904 siblingsAbove =
@@ -1348,16 +913,14 @@ alignTop =
1348 |> List.sum
913 |> List.sum
1350 [ expectRoundedEquality
915 [ expectRoundedEquality
1351− { found = found.self.bbox.top
916+ found.self.bbox.top
1352− , expected = found.parent.bbox.top + (found.parent.bbox.padding.top + heightsAbove + spacings)
917+ (found.parent.bbox.top + (found.parent.bbox.padding.top + heightsAbove + spacings))
1357 [ expectRoundedEquality
921 [ expectRoundedEquality
1358− { found = found.self.bbox.top
922+ found.self.bbox.top
1359− , expected = found.parent.bbox.top
923+ found.parent.bbox.top
@@ -1368,14 +931,13 @@ alignBottom =
1368 Testable.LabeledTest
931 Testable.LabeledTest
1369 { label = "alignBottom"
932 { label = "alignBottom"
1370 , attr = Element.alignBottom
933 , attr = Element.alignBottom
1371− , id = Testable.NoId
1372 , test =
934 , test =
1373 \found ->
935 \found ->
1374− if List.member found.parentLayout [ Testable.IsNearby Testable.Above, Testable.IsNearby Testable.Below ] then
936+ if List.member found.location [ Testable.IsNearby Testable.Above, Testable.IsNearby Testable.Below ] then
1375 [ Testable.true "alignBottom doesn't apply to elements that are above or below" True ]
937 [ Testable.true "alignBottom doesn't apply to elements that are above or below" True ]
1378− List.member found.parentLayout
940+ List.member found.location
1379 [ Testable.IsNearby Testable.InFront
941 [ Testable.IsNearby Testable.InFront
1380 , Testable.IsNearby Testable.Behind
942 , Testable.IsNearby Testable.Behind
1381 , Testable.IsNearby Testable.OnRight
943 , Testable.IsNearby Testable.OnRight
@@ -1383,20 +945,18 @@ alignBottom =
1385 [ expectRoundedEquality
947 [ expectRoundedEquality
1386− { found = found.self.bbox.bottom
948+ found.self.bbox.bottom
1387− , expected = found.parent.bbox.bottom
949+ found.parent.bbox.bottom
1391 else if List.length found.siblings == 0 then
952 else if List.length found.siblings == 0 then
1392 [ expectRoundedEquality
953 [ expectRoundedEquality
1393− { found = found.self.bbox.bottom
954+ found.self.bbox.bottom
1394− , expected = found.parent.bbox.bottom + found.parent.bbox.padding.bottom
955+ (found.parent.bbox.bottom + found.parent.bbox.padding.bottom)
1399− case found.parentLayout of
959+ case found.location of
1400 Testable.InColumn ->
960 Testable.InColumn ->
1402 siblingsBelow =
962 siblingsBelow =
@@ -1411,25 +971,22 @@ alignBottom =
1411 |> List.sum
971 |> List.sum
1413 [ expectRoundedEquality
973 [ expectRoundedEquality
1414− { found = found.self.bbox.bottom
974+ found.self.bbox.bottom
1415− , expected = found.parent.bbox.bottom - (found.parent.bbox.padding.bottom + heightsBelow + spacings)
975+ (found.parent.bbox.bottom - (found.parent.bbox.padding.bottom + heightsBelow + spacings))
1420 [ expectRoundedEquality
979 [ expectRoundedEquality
1421− { found = found.self.bbox.bottom
980+ found.self.bbox.bottom
1422− , expected = found.parent.bbox.bottom + found.parent.bbox.padding.bottom
981+ (found.parent.bbox.bottom + found.parent.bbox.padding.bottom)
1428−expectRoundedEquality : { expected : Float, found : Float } -> Testable.LayoutExpectation
986+expectRoundedEquality x y =
1429−expectRoundedEquality { expected, found } =
1430 Testable.true
987 Testable.true
1431− ("expected " ++ floatToString expected ++ ", found " ++ floatToString found)
988+ ("within 1 of each other " ++ floatToString x ++ ", " ++ floatToString y)
1432− (abs (expected - found) < 1)
989+ (abs (x - y) < 1)
1435floatToString : Float -> String
992floatToString : Float -> String
@@ -1443,7 +1000,6 @@ centerY =
1443 Testable.LabeledTest
1000 Testable.LabeledTest
1444 { label = "centerY"
1001 { label = "centerY"
1445 , attr = Element.centerY
1002 , attr = Element.centerY
1446− , id = Testable.NoId
1447 , test =
1003 , test =
1448 \found ->
1004 \found ->
@@ -1453,18 +1009,17 @@ centerY =
1453 parentCenter =
1009 parentCenter =
1454 found.parent.bbox.top + (found.parent.bbox.height / 2)
1010 found.parent.bbox.top + (found.parent.bbox.height / 2)
1456− if List.member found.parentLayout [ Testable.IsNearby Testable.Above, Testable.IsNearby Testable.Below ] then
1012+ if List.member found.location [ Testable.IsNearby Testable.Above, Testable.IsNearby Testable.Below ] then
1457 [ Testable.true "centerY doesn't apply to elements that are above or below" True ]
1013 [ Testable.true "centerY doesn't apply to elements that are above or below" True ]
1459 else if List.length found.siblings == 0 then
1015 else if List.length found.siblings == 0 then
1460 [ expectRoundedEquality
1016 [ expectRoundedEquality
1461− { found = selfCenter
1017+ selfCenter
1462− , expected = parentCenter
1018+ parentCenter
1467− case found.parentLayout of
1022+ case found.location of
1468 Testable.InColumn ->
1023 Testable.InColumn ->
1470 siblingsOnTop =
1025 siblingsOnTop =
@@ -1495,17 +1050,12 @@ centerY =
1497 [ expectRoundedEquality
1052 [ expectRoundedEquality
1498− { found = selfCenter
1053+ selfCenter
1499− , expected = expectedCenter
1054+ expectedCenter
1504− [ expectRoundedEquality
1058+ [ expectRoundedEquality selfCenter parentCenter ]
1505− { found = selfCenter
1506− , expected = parentCenter
@@ -1518,11 +1068,7 @@ above element =
1518 , label = "above"
1068 , label = "above"
1519 , test =
1069 , test =
1520 \found ->
1070 \found ->
1521− [ expectRoundedEquality
1071+ [ expectRoundedEquality found.self.bbox.bottom found.parent.bbox.top ]
1522− { found = found.self.bbox.bottom
1523− , expected = found.parent.bbox.top
@@ -1535,11 +1081,7 @@ below element =
1535 , label = "below"
1081 , label = "below"
1536 , test =
1082 , test =
1537 \found ->
1083 \found ->
1538− [ expectRoundedEquality
1084+ [ expectRoundedEquality found.self.bbox.top found.parent.bbox.bottom ]
1539− { found = found.self.bbox.top
1540− , expected = found.parent.bbox.bottom
@@ -1552,11 +1094,7 @@ onRight element =
1552 , label = "onRight"
1094 , label = "onRight"
1553 , test =
1095 , test =
1554 \found ->
1096 \found ->
1555− [ expectRoundedEquality
1097+ [ expectRoundedEquality found.self.bbox.left found.parent.bbox.right ]
1556− { found = found.self.bbox.left
1557− , expected = found.parent.bbox.right
@@ -1569,11 +1107,7 @@ onLeft element =
1569 , label = "onLeft"
1107 , label = "onLeft"
1570 , test =
1108 , test =
1571 \found ->
1109 \found ->
1572− [ expectRoundedEquality
1110+ [ expectRoundedEquality found.self.bbox.right found.parent.bbox.left ]
1573− { found = found.self.bbox.right
1574− , expected = found.parent.bbox.left
@@ -1639,85 +1173,3 @@ behindContent element =
1639 \found ->
1173 \found ->
1640 [ withinHelper found ]
1174 [ withinHelper found ]
1645−{- Implicit width/height calcualtions -}
1648−implicitWidthHeightShrink attrs =
1651− implicitTest (widthHelper Nothing Nothing Shrink)
1652− :: implicitTest (heightHelper Nothing Nothing Shrink)
1655− skipOverridden withImplicits
1660− Testable.LabeledTest details ->
1663− Testable.AttrTest details ->
1672− (\attr ( found, caught ) ->
1675− case attrId attr of
1679− Testable.IsWidth ->
1681− , { hasWidth = True
1682− , hasHeight = found.hasHeight
1686− Testable.IsHeight ->
1688− , { hasWidth = found.hasWidth
1701− ( { hasWidth = False
1702− , hasHeight = False
1711−{-| This is taking a normal test and rmoving its ability to attach a real `Element` attribute.
1715− Testable.LabeledTest details ->
1717− { test = details.test
1718− , label = "Implicit -> " ++ details.label