@@ -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
@@ -69,16 +63,11 @@ import Testable
69import Testable.Runner
63import 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
66+layout : List (Testable.Attr msg) -> Testable.Element Testable.Runner.Msg -> Testable.Runner.TestableProgram
80layout attrs elem =
67layout attrs elem =
81− Testable.Runner.testable "Test" elem
68+ Testable.Runner.program
69+ [ ( "Tests Run", elem )
84text : String -> Testable.Element msg
73text : String -> Testable.Element msg
@@ -108,59 +97,12 @@ none =
109paragraph : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
98paragraph : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
110paragraph attrs =
99paragraph attrs =
111− let
100+ Testable.Paragraph (implicitWidthHeightShrink attrs)
113− implicitTest (widthHelper Nothing Nothing (Fill 1))
114− :: implicitTest (heightHelper Nothing Nothing Shrink)
117− Testable.Paragraph (skipOverridden withImplicits)
120textColumn : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
103textColumn : List (Testable.Attr msg) -> List (Testable.Element msg) -> Testable.Element msg
121textColumn attrs =
104textColumn attrs =
124− implicitTest (widthHelper (Just 500) (Just 750) (Fill 1))
125− :: implicitTest (heightHelper Nothing Nothing Shrink)
128− Testable.TextColumn (skipOverridden withImplicits)
132− List (Testable.Attr msg)
135− , label : Testable.Element msg
137− -> Testable.Element msg
139− Testable.Link details.url
140− (implicitWidthHeightShrink attrs)
105+ Testable.TextColumn (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
108{-| Old labeling mechanism that i removed to hastily
@@ -334,11 +276,6 @@ paddingXY x y =
338− List.filter Tuple.first ls
339− |> List.map Tuple.second
342widthHelper maybeMin maybeMax len =
279widthHelper maybeMin maybeMax len =
344 addMin l =
281 addMin l =
@@ -407,10 +344,7 @@ widthHelper maybeMin maybeMax len =
409 \found ->
346 \found ->
410− [ expectRoundedEquality
411− { expected = toFloat val
412− , found = found.self.bbox.width
347+ [ 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))
348 , Testable.true "min/max is upheld" (minMaxTest (floor found.self.bbox.width))
@@ -440,93 +374,33 @@ widthHelper maybeMin maybeMax len =
440 parentAvailableWidth =
374 parentAvailableWidth =
441 context.parent.bbox.width - (context.self.bbox.padding.left + context.self.bbox.padding.right)
375 context.parent.bbox.width - (context.self.bbox.padding.left + context.self.bbox.padding.right)
444− [ case context.parentLayout of
377+ [ case context.parentLayout of
445− Testable.IsNearby _ ->
378+ Testable.IsNearby _ ->
446− [ Testable.true "Nearby Element has fill width"
379+ Testable.true "Nearby Element has fill width"
447− ((floor context.parent.bbox.width == floor context.self.bbox.width)
380+ ((floor context.parent.bbox.width == floor context.self.bbox.width)
448− || minMaxTest (floor context.self.bbox.width)
381+ || minMaxTest (floor context.self.bbox.width)
452− Testable.InColumn ->
384+ Testable.InColumn ->
453− [ Testable.true "Element within column has fill width"
385+ Testable.true "Element within column has fill width"
454− ((floor parentAvailableWidth == floor context.self.bbox.width)
386+ ((floor parentAvailableWidth == floor context.self.bbox.width)
455− || minMaxTest (floor context.self.bbox.width)
460− [ Testable.true "Element within element has fill width" <|
461− (floor parentAvailableWidth == floor context.self.bbox.width)
462− || minMaxTest (floor context.self.bbox.width)
387+ || minMaxTest (floor context.self.bbox.width)
468− parentAvailableWidth / toFloat (List.length context.siblings + 1)
470− [ Testable.true "element has fill width" <|
471− (floor spacePerPortion == floor context.self.bbox.width)
472− || 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)
391+ Testable.true "Element within element has fill width" <|
392+ (floor parentAvailableWidth == floor context.self.bbox.width)
393+ || minMaxTest (floor context.self.bbox.width)
398+ parentAvailableWidth / toFloat (List.length context.siblings + 1)
400+ Testable.true "element has fill width" <|
401+ (floor spacePerPortion == floor context.self.bbox.width)
402+ || minMaxTest (floor context.self.bbox.width)
532 Shrink ->
406 Shrink ->
@@ -556,49 +430,11 @@ widthHelper maybeMin maybeMax len =
556 horizontalPadding =
430 horizontalPadding =
557 context.self.bbox.padding.left + context.self.bbox.padding.right
431 context.self.bbox.padding.left + context.self.bbox.padding.right
559− listIf
433+ [ expectRoundedEquality
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 _ _ _ ->
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
434+ { expected = totalChildren + horizontalPadding
593− , found = context.self.bbox.width
435+ , 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 _ ->
439 Testable.Row rowAttrs _ ->
604 -- width of row is the sum of all children widths
440 -- width of row is the sum of all children widths
@@ -622,19 +458,11 @@ widthHelper maybeMin maybeMax len =
622 totalSpacing =
458 totalSpacing =
623 toFloat spacingAmount * (toFloat (List.length context.children) - 1)
459 toFloat spacingAmount * (toFloat (List.length context.children) - 1)
627− , expectRoundedEquality
461+ [ expectRoundedEquality
628− { expected = totalChildren + horizontalPadding + totalSpacing
462+ { expected = totalChildren + horizontalPadding + totalSpacing
629− , found = context.self.bbox.width
463+ , 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 _ _ ->
467 Testable.Column _ _ ->
640 -- The width of the column is the width of the widest child.
468 -- The width of the column is the width of the widest child.
@@ -658,55 +486,14 @@ widthHelper maybeMin maybeMax len =
658 |> List.map childWidth
486 |> List.map childWidth
659 |> List.append textChildren
487 |> List.append textChildren
663− , expectRoundedEquality
489+ [ expectRoundedEquality
664− { expected = Maybe.withDefault 0 (List.maximum allChildren)
490+ { expected = Maybe.withDefault 0 (List.maximum allChildren)
665− , found = context.self.bbox.width
491+ , 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 _ _ ->
495 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 _ _ ->
498 Testable.Paragraph _ _ ->
712 -- This should be the size it's text,
499 -- This should be the size it's text,
@@ -724,19 +511,11 @@ widthHelper maybeMin maybeMax len =
724 horizontalPadding =
511 horizontalPadding =
725 context.self.bbox.padding.left + context.self.bbox.padding.right
512 context.self.bbox.padding.left + context.self.bbox.padding.right
729− , expectRoundedEquality
514+ [ expectRoundedEquality
730− { expected = totalChildren + horizontalPadding
515+ { expected = totalChildren + horizontalPadding
731− , found = context.self.bbox.width
516+ , 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
741 Testable.Text _ ->
520 Testable.Text _ ->
@@ -814,10 +593,8 @@ heightHelper maybeMin maybeMax len =
814 , id = Testable.IsHeight
593 , id = Testable.IsHeight
816 \found ->
595 \found ->
817− [ expectRoundedEquality
596+ [ 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
597+ (floor found.self.bbox.height == val)
821 , Testable.true "min/max holds true"
598 , Testable.true "min/max holds true"
822 (minMaxTest (floor found.self.bbox.height))
599 (minMaxTest (floor found.self.bbox.height))
@@ -888,86 +665,47 @@ heightHelper maybeMin maybeMax len =
888 Testable.El _ _ ->
665 Testable.El _ _ ->
890 childHeight child =
667 childHeight child =
668+ -- TODO: add margin values to heights
891 child.bbox.height
669 child.bbox.height
893− if List.isEmpty context.children then
894− -- context.self.textMetrics
895− -- |> List.map Testable.textHeight
897− -- TODO: apparently the font metrics we have are for the literal characters rendered
898− -- not for the font itself.
899− [ Testable.todo "calculate height from actual text metrics"
902− else
671+ totalChildren =
903− [ expectRoundedEquality
905− context.children
672+ context.children
906− |> List.map childHeight
673+ |> List.map childHeight
907− |> List.sum
674+ |> List.append (List.map Testable.textHeight context.self.textMetrics)
908− |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
675+ |> List.sum
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 _ _ _ ->
677+ verticalPadding =
917− let
678+ context.self.bbox.padding.top + context.self.bbox.padding.bottom
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"
930− else
680+ spacingValue =
681+ toFloat context.parentSpacing * (toFloat (List.length context.children) - 1)
931− [ expectRoundedEquality
683+ [ expectRoundedEquality
932− { expected =
684+ { expected = totalChildren + verticalPadding + spacingValue
934− |> List.map childHeight
936− |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
937− , found = context.self.bbox.height
685+ , found = context.self.bbox.height
939− , Testable.lessThanOrEqual "not larger than parent"
940− context.self.bbox.height
941− context.parent.bbox.height
944 Testable.Row _ _ ->
689 Testable.Row _ _ ->
946 childHeight child =
691 childHeight child =
947 child.bbox.height
692 child.bbox.height
696+ |> List.map childHeight
697+ |> List.append (List.map Testable.textHeight context.self.textMetrics)
699+ |> Maybe.withDefault 0
702+ context.self.bbox.padding.top + context.self.bbox.padding.bottom
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
704+ [ expectRoundedEquality
959− { expected =
705+ { expected = totalChildren + verticalPadding
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
706+ , 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 _ ->
710 Testable.Column colAttrs _ ->
@@ -993,9 +731,6 @@ heightHelper maybeMin maybeMax len =
993 { expected = totalChildren + verticalPadding + totalSpacing
731 { expected = totalChildren + verticalPadding + totalSpacing
994 , found = context.self.bbox.height
732 , 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 _ _ ->
736 Testable.TextColumn _ _ ->