@@ -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,51 +430,13 @@ 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 _ _ ->
604 -- width of row is the sum of all children widths
440 -- width of row is the sum of all children widths
605 -- both text elements and others.
441 -- both text elements and others.
@@ -616,25 +452,14 @@ widthHelper maybeMin maybeMax len =
616 horizontalPadding =
452 horizontalPadding =
617 context.self.bbox.padding.left + context.self.bbox.padding.right
453 context.self.bbox.padding.left + context.self.bbox.padding.right
619− spacingAmount =
455+ spacingValue =
620− Testable.getSpacingFromAttributes rowAttrs
623− toFloat spacingAmount * (toFloat (List.length context.children) - 1)
456+ toFloat context.parentSpacing * (toFloat (List.length context.children) - 1)
627− , expectRoundedEquality
458+ [ expectRoundedEquality
628− { expected = totalChildren + horizontalPadding + totalSpacing
459+ { expected = totalChildren + horizontalPadding + spacingValue
629− , found = context.self.bbox.width
460+ , 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 _ _ ->
464 Testable.Column _ _ ->
640 -- The width of the column is the width of the widest child.
465 -- The width of the column is the width of the widest child.
@@ -658,55 +483,14 @@ widthHelper maybeMin maybeMax len =
658 |> List.map childWidth
483 |> List.map childWidth
659 |> List.append textChildren
484 |> List.append textChildren
663− , expectRoundedEquality
486+ [ expectRoundedEquality
664− { expected = Maybe.withDefault 0 (List.maximum allChildren)
487+ { expected = Maybe.withDefault 0 (List.maximum allChildren)
665− , found = context.self.bbox.width
488+ , 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 _ _ ->
492 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 _ _ ->
495 Testable.Paragraph _ _ ->
712 -- This should be the size it's text,
496 -- This should be the size it's text,
@@ -724,19 +508,11 @@ widthHelper maybeMin maybeMax len =
724 horizontalPadding =
508 horizontalPadding =
725 context.self.bbox.padding.left + context.self.bbox.padding.right
509 context.self.bbox.padding.left + context.self.bbox.padding.right
729− , expectRoundedEquality
511+ [ expectRoundedEquality
730− { expected = totalChildren + horizontalPadding
512+ { expected = totalChildren + horizontalPadding
731− , found = context.self.bbox.width
513+ , 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 _ ->
517 Testable.Text _ ->
@@ -814,10 +590,8 @@ heightHelper maybeMin maybeMax len =
814 , id = Testable.IsHeight
590 , id = Testable.IsHeight
816 \found ->
592 \found ->
817− [ expectRoundedEquality
593+ [ 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
594+ (floor found.self.bbox.height == val)
821 , Testable.true "min/max holds true"
595 , Testable.true "min/max holds true"
822 (minMaxTest (floor found.self.bbox.height))
596 (minMaxTest (floor found.self.bbox.height))
@@ -888,88 +662,49 @@ heightHelper maybeMin maybeMax len =
888 Testable.El _ _ ->
662 Testable.El _ _ ->
890 childHeight child =
664 childHeight child =
665+ -- TODO: add margin values to heights
891 child.bbox.height
666 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
668+ totalChildren =
903− [ expectRoundedEquality
905− context.children
669+ context.children
906− |> List.map childHeight
670+ |> List.map childHeight
907− |> List.sum
671+ |> List.append (List.map Testable.textHeight context.self.textMetrics)
908− |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
672+ |> 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 _ _ _ ->
674+ verticalPadding =
917− let
675+ 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
677+ spacingValue =
678+ toFloat context.parentSpacing * (toFloat (List.length context.children) - 1)
931− [ expectRoundedEquality
680+ [ expectRoundedEquality
932− { expected =
681+ { 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
682+ , 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 _ _ ->
686 Testable.Row _ _ ->
946 childHeight child =
688 childHeight child =
947 child.bbox.height
689 child.bbox.height
693+ |> List.map childHeight
694+ |> List.append (List.map Testable.textHeight context.self.textMetrics)
696+ |> Maybe.withDefault 0
699+ 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
701+ [ expectRoundedEquality
959− { expected =
702+ { 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
703+ , 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 _ ->
707+ Testable.Column _ _ ->
974 childHeight child =
709 childHeight child =
975 child.bbox.height
710 child.bbox.height
@@ -983,19 +718,13 @@ heightHelper maybeMin maybeMax len =
983 verticalPadding =
718 verticalPadding =
984 context.self.bbox.padding.top + context.self.bbox.padding.bottom
719 context.self.bbox.padding.top + context.self.bbox.padding.bottom
986− spacingAmount =
721+ spacingValue =
987− Testable.getSpacingFromAttributes colAttrs
990− toFloat spacingAmount * (toFloat (List.length context.children) - 1)
722+ toFloat context.parentSpacing * (toFloat (List.length context.children) - 1)
992 [ expectRoundedEquality
724 [ expectRoundedEquality
993− { expected = totalChildren + verticalPadding + totalSpacing
725+ { expected = totalChildren + verticalPadding + spacingValue
994 , found = context.self.bbox.height
726 , 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 _ _ ->
730 Testable.TextColumn _ _ ->