740 {
741 flutter::FlutterPlatformViewsTestMockPlatformViewDelegate mock_delegate;
744 thread_task_runner,
745 thread_task_runner,
746 thread_task_runner,
747 thread_task_runner);
748 auto flutterPlatformViewsController = std::make_shared<flutter::FlutterPlatformViewsController>();
749 auto platform_view = std::make_unique<flutter::PlatformViewIOS>(
750 mock_delegate,
751 mock_delegate.settings_.enable_impeller
754 flutterPlatformViewsController,
755 runners,
756 nil,
757 std::make_shared<
fml::SyncSwitch>());
758
761 flutterPlatformViewsController->RegisterViewFactory(
762 factory, @"MockFlutterPlatformView",
765 };
766 flutterPlatformViewsController->OnMethodCall(
768 methodCallWithMethodName:@"create"
769 arguments:@{@"id" : @2, @"viewType" : @"MockFlutterPlatformView"}],
771
773
774 UIView* mockFlutterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
775 flutterPlatformViewsController->SetFlutterView(mockFlutterView);
776
778
779 CGFloat screenScale = [UIScreen mainScreen].scale;
782
784 for (int i = 0; i < 5; i++) {
786 }
787
788 auto embeddedViewParams =
789 std::make_unique<flutter::EmbeddedViewParams>(screenScaleMatrix,
SkSize::Make(10, 10), stack);
790
791 flutterPlatformViewsController->PrerollCompositeEmbeddedView(2, std::move(embeddedViewParams));
792 flutterPlatformViewsController->CompositeEmbeddedView(2);
795 [mockFlutterView addSubview:childClippingView];
796
797 [mockFlutterView setNeedsLayout];
798 [mockFlutterView layoutIfNeeded];
799
800 NSMutableArray* originalVisualEffectViews = [[NSMutableArray alloc] init];
801 for (UIView* subview in childClippingView.subviews) {
802 if (![subview isKindOfClass:[UIVisualEffectView class]]) {
803 continue;
804 }
805 XCTAssertLessThan(originalVisualEffectViews.count, 5u);
806 if ([self validateOneVisualEffectView:subview
807 expectedFrame:CGRectMake(0, 0, 10, 10)
808 inputRadius:(CGFloat)5]) {
809 [originalVisualEffectViews addObject:subview];
810 }
811 }
812
813
814
816
818
819 for (int i = 0; i < 5; i++) {
820 if (i == 3) {
821 auto filter2 =
823
826 continue;
827 }
828
830 }
831
832 embeddedViewParams = std::make_unique<flutter::EmbeddedViewParams>(screenScaleMatrix,
834
835 flutterPlatformViewsController->PrerollCompositeEmbeddedView(2, std::move(embeddedViewParams));
836 flutterPlatformViewsController->CompositeEmbeddedView(2);
837 [mockFlutterView setNeedsLayout];
838 [mockFlutterView layoutIfNeeded];
839
840 NSMutableArray* newVisualEffectViews = [[NSMutableArray alloc] init];
841 for (UIView* subview in childClippingView.subviews) {
842 if (![subview isKindOfClass:[UIVisualEffectView class]]) {
843 continue;
844 }
845 XCTAssertLessThan(newVisualEffectViews.count, 5u);
846 CGFloat expectInputRadius = 5;
847 if (newVisualEffectViews.count == 3) {
848 expectInputRadius = 2;
849 }
850 if ([self validateOneVisualEffectView:subview
851 expectedFrame:CGRectMake(0, 0, 10, 10)
852 inputRadius:(CGFloat)expectInputRadius]) {
853 [newVisualEffectViews addObject:subview];
854 }
855 }
856 XCTAssertEqual(newVisualEffectViews.count, 5u);
857 for (NSUInteger i = 0; i < newVisualEffectViews.count; i++) {
858 UIView* newView = newVisualEffectViews[i];
859 id mockNewView = OCMPartialMock(newView);
860 UIView* originalView = originalVisualEffectViews[i];
861
862 XCTAssertEqual(originalView, newView);
863 OCMReject([mockNewView removeFromSuperview]);
864 [mockNewView stopMocking];
865 }
866 [newVisualEffectViews removeAllObjects];
867
868
869
870 for (int i = 0; i < 5; i++) {
872 }
873
874 for (int i = 0; i < 5; i++) {
875 if (i == 0) {
876 auto filter2 =
880 continue;
881 }
882
884 }
885
886 embeddedViewParams = std::make_unique<flutter::EmbeddedViewParams>(screenScaleMatrix,
888
889 flutterPlatformViewsController->PrerollCompositeEmbeddedView(2, std::move(embeddedViewParams));
890 flutterPlatformViewsController->CompositeEmbeddedView(2);
891 [mockFlutterView setNeedsLayout];
892 [mockFlutterView layoutIfNeeded];
893
894 for (UIView* subview in childClippingView.subviews) {
895 if (![subview isKindOfClass:[UIVisualEffectView class]]) {
896 continue;
897 }
898 XCTAssertLessThan(newVisualEffectViews.count, 5u);
899 CGFloat expectInputRadius = 5;
900 if (newVisualEffectViews.count == 0) {
901 expectInputRadius = 2;
902 }
903 if ([self validateOneVisualEffectView:subview
904 expectedFrame:CGRectMake(0, 0, 10, 10)
905 inputRadius:(CGFloat)expectInputRadius]) {
906 [newVisualEffectViews addObject:subview];
907 }
908 }
909 for (NSUInteger i = 0; i < newVisualEffectViews.count; i++) {
910 UIView* newView = newVisualEffectViews[i];
911 id mockNewView = OCMPartialMock(newView);
912 UIView* originalView = originalVisualEffectViews[i];
913
914 XCTAssertEqual(originalView, newView);
915 OCMReject([mockNewView removeFromSuperview]);
916 [mockNewView stopMocking];
917 }
918 [newVisualEffectViews removeAllObjects];
919
920
921
922 for (int i = 0; i < 5; i++) {
924 }
925
926 for (int i = 0; i < 5; i++) {
927 if (i == 4) {
928 auto filter2 =
932 continue;
933 }
934
936 }
937
938 embeddedViewParams = std::make_unique<flutter::EmbeddedViewParams>(screenScaleMatrix,
940
941 flutterPlatformViewsController->PrerollCompositeEmbeddedView(2, std::move(embeddedViewParams));
942 flutterPlatformViewsController->CompositeEmbeddedView(2);
943 [mockFlutterView setNeedsLayout];
944 [mockFlutterView layoutIfNeeded];
945
946 for (UIView* subview in childClippingView.subviews) {
947 if (![subview isKindOfClass:[UIVisualEffectView class]]) {
948 continue;
949 }
950 XCTAssertLessThan(newVisualEffectViews.count, 5u);
951 CGFloat expectInputRadius = 5;
952 if (newVisualEffectViews.count == 4) {
953 expectInputRadius = 2;
954 }
955 if ([self validateOneVisualEffectView:subview
956 expectedFrame:CGRectMake(0, 0, 10, 10)
957 inputRadius:(CGFloat)expectInputRadius]) {
958 [newVisualEffectViews addObject:subview];
959 }
960 }
961 XCTAssertEqual(newVisualEffectViews.count, 5u);
962
963 for (NSUInteger i = 0; i < newVisualEffectViews.count; i++) {
964 UIView* newView = newVisualEffectViews[i];
965 id mockNewView = OCMPartialMock(newView);
966 UIView* originalView = originalVisualEffectViews[i];
967
968 XCTAssertEqual(originalView, newView);
969 OCMReject([mockNewView removeFromSuperview]);
970 [mockNewView stopMocking];
971 }
972 [newVisualEffectViews removeAllObjects];
973
974
975
976 for (int i = 0; i < 5; i++) {
978 }
979
980 for (int i = 0; i < 5; i++) {
982
984 }
985
986 embeddedViewParams = std::make_unique<flutter::EmbeddedViewParams>(screenScaleMatrix,
988
989 flutterPlatformViewsController->PrerollCompositeEmbeddedView(2, std::move(embeddedViewParams));
990 flutterPlatformViewsController->CompositeEmbeddedView(2);
991 [mockFlutterView setNeedsLayout];
992 [mockFlutterView layoutIfNeeded];
993
994 for (UIView* subview in childClippingView.subviews) {
995 if (![subview isKindOfClass:[UIVisualEffectView class]]) {
996 continue;
997 }
998 XCTAssertLessThan(newVisualEffectViews.count, 5u);
999 if ([self validateOneVisualEffectView:subview
1000 expectedFrame:CGRectMake(0, 0, 10, 10)
1001 inputRadius:(CGFloat)newVisualEffectViews.
count]) {
1002 [newVisualEffectViews addObject:subview];
1003 }
1004 }
1005 XCTAssertEqual(newVisualEffectViews.count, 5u);
1006
1007 for (NSUInteger i = 0; i < newVisualEffectViews.count; i++) {
1008 UIView* newView = newVisualEffectViews[i];
1009 id mockNewView = OCMPartialMock(newView);
1010 UIView* originalView = originalVisualEffectViews[i];
1011
1012 XCTAssertEqual(originalView, newView);
1013 OCMReject([mockNewView removeFromSuperview]);
1014 [mockNewView stopMocking];
1015 }
1016 [newVisualEffectViews removeAllObjects];
1017}