@@ -10,6 +10,7 @@ module Testable.Element exposing
15 , expectRoundedEquality
16 , expectRoundedEquality
@@ -37,6 +38,9 @@ module Testable.Element exposing
@@ -132,8 +136,31 @@ link :
133 -> Testable.Element msg
137 -> Testable.Element msg
134link attrs details =
138link attrs details =
135− -- TODO: this is not actually a link element!!
139+ Testable.Link details.url
136− Testable.El (implicitWidthHeightShrink attrs) details.label
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
139{-| Old labeling mechanism that i removed to hastily
166{-| Old labeling mechanism that i removed to hastily
@@ -307,6 +334,11 @@ paddingXY x y =
338+ List.filter Tuple.first ls
339+ |> List.map Tuple.second
310widthHelper maybeMin maybeMax len =
342widthHelper maybeMin maybeMax len =
312 addMin l =
344 addMin l =
@@ -465,12 +497,31 @@ widthHelper maybeMin maybeMax len =
465 totalChildren + horizontalPadding
497 totalChildren + horizontalPadding
467 expectedLines =
499 expectedLines =
500+ if boxChildrenHeight > 20 then
501+ ceiling (boxChildrenHeight / 20)
468− ceiling (totalCalculatedWidth / context.self.bbox.width)
504+ ceiling (totalCalculatedWidth / context.self.bbox.width)
470− [ Testable.rounded "text wrapping, checking height"
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.
471− { expected = toFloat (expectedLines * 22)
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.
472− , found = context.self.bbox.height
523+ context.self.bbox.height < (20 * 2)
@@ -504,23 +555,50 @@ widthHelper maybeMin maybeMax len =
505 horizontalPadding =
556 horizontalPadding =
506 context.self.bbox.padding.left + context.self.bbox.padding.right
557 context.self.bbox.padding.left + context.self.bbox.padding.right
509− Debug.log "widths"
560+ [ ( (context.parentLayout /= Testable.InParagraph)
510− { children =
561+ && (context.parentLayout /= Testable.InTextCol)
511− context.children
562+ , Testable.rounded "equals children"
512− |> List.map childWidth
563+ { expected = totalChildren + horizontalPadding
513− , text = List.map .width context.self.textMetrics
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)
516− [ Testable.rounded "equals children"
591+ , Testable.rounded "equals children"
517− { expected = totalChildren + horizontalPadding
592+ { expected = totalChildren + horizontalPadding
518− , found = context.self.bbox.width
593+ , found = context.self.bbox.width
596+ , ( context.parentLayout /= Testable.AtRoot
520− , Testable.lessThanOrEqual "not larger than parent"
597+ , Testable.lessThanOrEqual "not larger than parent"
521− context.self.bbox.width
598+ context.self.bbox.width
522− context.parent.bbox.width
599+ context.parent.bbox.width
525 Testable.Row rowAttrs _ ->
603 Testable.Row rowAttrs _ ->
526 -- width of row is the sum of all children widths
604 -- width of row is the sum of all children widths
@@ -544,14 +622,19 @@ widthHelper maybeMin maybeMax len =
544 totalSpacing =
622 totalSpacing =
545 toFloat spacingAmount * (toFloat (List.length context.children) - 1)
623 toFloat spacingAmount * (toFloat (List.length context.children) - 1)
547− [ expectRoundedEquality
627+ , expectRoundedEquality
548− { expected = totalChildren + horizontalPadding + totalSpacing
628+ { expected = totalChildren + horizontalPadding + totalSpacing
549− , found = context.self.bbox.width
629+ , found = context.self.bbox.width
632+ , ( context.parentLayout /= Testable.AtRoot
551− , Testable.lessThanOrEqual "not larger than parent"
633+ , Testable.lessThanOrEqual "not larger than parent"
552− context.self.bbox.width
634+ context.self.bbox.width
553− context.parent.bbox.width
635+ context.parent.bbox.width
556 Testable.Column _ _ ->
639 Testable.Column _ _ ->
557 -- The width of the column is the width of the widest child.
640 -- The width of the column is the width of the widest child.
@@ -575,14 +658,19 @@ widthHelper maybeMin maybeMax len =
575 |> List.map childWidth
658 |> List.map childWidth
576 |> List.append textChildren
659 |> List.append textChildren
578− [ expectRoundedEquality
663+ , expectRoundedEquality
579− { expected = Maybe.withDefault 0 (List.maximum allChildren)
664+ { expected = Maybe.withDefault 0 (List.maximum allChildren)
580− , found = context.self.bbox.width
665+ , found = context.self.bbox.width
668+ , ( context.parentLayout /= Testable.AtRoot
582− , Testable.lessThanOrEqual "not larger than parent"
669+ , Testable.lessThanOrEqual "not larger than parent"
583− context.self.bbox.width
670+ context.self.bbox.width
584− context.parent.bbox.width
671+ context.parent.bbox.width
587 Testable.TextColumn _ _ ->
675 Testable.TextColumn _ _ ->
588 -- The width of the column is the width of the widest child.
676 -- The width of the column is the width of the widest child.
@@ -606,14 +694,19 @@ widthHelper maybeMin maybeMax len =
606 |> List.map childWidth
694 |> List.map childWidth
607 |> List.append textChildren
695 |> List.append textChildren
609− [ expectRoundedEquality
699+ , expectRoundedEquality
610− { expected = Maybe.withDefault 0 (List.maximum allChildren)
700+ { expected = Maybe.withDefault 0 (List.maximum allChildren)
611− , found = context.self.bbox.width
701+ , found = context.self.bbox.width
704+ , ( context.parentLayout /= Testable.AtRoot
613− , Testable.lessThanOrEqual "not larger than parent"
705+ , Testable.lessThanOrEqual "not larger than parent"
614− context.self.bbox.width
706+ context.self.bbox.width
615− context.parent.bbox.width
707+ context.parent.bbox.width
618 Testable.Paragraph _ _ ->
711 Testable.Paragraph _ _ ->
619 -- This should be the size it's text,
712 -- This should be the size it's text,
@@ -631,14 +724,19 @@ widthHelper maybeMin maybeMax len =
631 horizontalPadding =
724 horizontalPadding =
632 context.self.bbox.padding.left + context.self.bbox.padding.right
725 context.self.bbox.padding.left + context.self.bbox.padding.right
634− [ expectRoundedEquality
729+ , expectRoundedEquality
635− { expected = totalChildren + horizontalPadding
730+ { expected = totalChildren + horizontalPadding
636− , found = context.self.bbox.width
731+ , found = context.self.bbox.width
734+ , ( context.parentLayout /= Testable.AtRoot
638− , Testable.lessThanOrEqual "not larger than parent"
735+ , Testable.lessThanOrEqual "not larger than parent"
639− context.self.bbox.width
736+ context.self.bbox.width
640− context.parent.bbox.width
737+ context.parent.bbox.width
643 Testable.Text _ ->
741 Testable.Text _ ->
@@ -792,20 +890,45 @@ heightHelper maybeMin maybeMax len =
792 childHeight child =
890 childHeight child =
793 child.bbox.height
891 child.bbox.height
795− [ if List.isEmpty context.children then
893+ if List.isEmpty context.children then
796 -- context.self.textMetrics
894 -- context.self.textMetrics
797 -- |> List.map Testable.textHeight
895 -- |> List.map Testable.textHeight
798 -- |> List.sum
896 -- |> List.sum
799 -- TODO: apparently the font metrics we have are for the literal characters rendered
897 -- TODO: apparently the font metrics we have are for the literal characters rendered
800 -- not for the font itself.
898 -- not for the font itself.
801− -- so for now, we are stubbing this in as 20, which is the default font size + line height.
899+ [ Testable.todo "calculate height from actual text metrics"
802− Testable.rounded "expected multiple of 20"
900+ ]
903+ [ expectRoundedEquality
803− { expected = context.self.bbox.height
904+ { expected =
804− , found = toFloat (List.length context.self.textMetrics * 20)
905+ context.children
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 _ _ _ ->
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"
808− expectRoundedEquality
931+ [ expectRoundedEquality
809 { expected =
932 { expected =
810 context.children
933 context.children
811 |> List.map childHeight
934 |> List.map childHeight
@@ -813,28 +936,26 @@ heightHelper maybeMin maybeMax len =
813 |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
936 |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
814 , found = context.self.bbox.height
937 , found = context.self.bbox.height
816− , Testable.lessThanOrEqual "not larger than parent"
939+ , Testable.lessThanOrEqual "not larger than parent"
817− context.self.bbox.height
940+ context.self.bbox.height
818− context.parent.bbox.height
941+ context.parent.bbox.height
821 Testable.Row _ _ ->
944 Testable.Row _ _ ->
823 childHeight child =
946 childHeight child =
824 child.bbox.height
947 child.bbox.height
826− [ if List.isEmpty context.children then
949+ if List.isEmpty context.children then
827 -- context.self.textMetrics
950 -- context.self.textMetrics
828 -- |> List.map Testable.textHeight
951 -- |> List.map Testable.textHeight
829 -- |> List.sum
952 -- |> List.sum
830 -- TODO: apparently the font metrics we have are for the literal characters rendered
953 -- TODO: apparently the font metrics we have are for the literal characters rendered
831 -- not for the font itself.
954 -- not for the font itself.
832− -- so for now, we are stubbing this in as 20, which is the default font size.
955+ [ Testable.todo "calculate height from actual text metrics" ]
833− Testable.true "expected multiple of 20"
834− ((round context.self.bbox.height |> modBy 20) == 0)
837− expectRoundedEquality
958+ [ expectRoundedEquality
838 { expected =
959 { expected =
839 context.children
960 context.children
840 |> List.map childHeight
961 |> List.map childHeight
@@ -843,10 +964,10 @@ heightHelper maybeMin maybeMax len =
843 |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
964 |> (\h -> h + context.self.bbox.padding.top + context.self.bbox.padding.bottom)
844 , found = context.self.bbox.height
965 , found = context.self.bbox.height
846− , Testable.lessThanOrEqual "not larger than parent"
967+ , Testable.lessThanOrEqual "not larger than parent"
847− context.self.bbox.height
968+ context.self.bbox.height
848− context.parent.bbox.height
969+ context.parent.bbox.height
851 Testable.Column colAttrs _ ->
972 Testable.Column colAttrs _ ->
@@ -878,16 +999,10 @@ heightHelper maybeMin maybeMax len =
880 Testable.TextColumn _ _ ->
1001 Testable.TextColumn _ _ ->
881− [ Testable.lessThanOrEqual "not larger than parent"
882− context.self.bbox.height
883− context.parent.bbox.height
886 Testable.Paragraph _ _ ->
1004 Testable.Paragraph _ _ ->
887− [ Testable.lessThanOrEqual "not larger than parent"
888− context.self.bbox.height
889− context.parent.bbox.height
892 Testable.Text _ ->
1007 Testable.Text _ ->