@@ -623,4 +623,119 @@ namespace Nui::Tests
623
623
std::string{characters[i]} + " :" + std::to_string (i));
624
624
}
625
625
}
626
+
627
+ TEST_F (TestRanges, StaticRangeRendererCanTakeNonConstElement)
628
+ {
629
+ std::vector<char > characters{' A' , ' B' , ' C' , ' D' };
630
+ Nui::val parent;
631
+
632
+ using Nui::Elements::div;
633
+ using Nui::Elements::body;
634
+ using namespace Nui ::Attributes;
635
+
636
+ render (body{reference = parent}(range (characters), [&characters](long long i, auto & element) {
637
+ element = ' X' ;
638
+ return div{}(std::string{element} + " :" + std::to_string (i));
639
+ }));
640
+
641
+ EXPECT_EQ (parent[" children" ][" length" ].as <long long >(), static_cast <long long >(characters.size ()));
642
+ for (int i = 0 ; i != characters.size (); ++i)
643
+ {
644
+ EXPECT_EQ (parent[" children" ][i][" textContent" ].as <std::string>(), " X:" + std::to_string (i));
645
+ }
646
+ }
647
+
648
+ TEST_F (TestRanges, ObservedRangeRendererCanTakeNonConstElement)
649
+ {
650
+ Nui::Observed<std::vector<char >> characters{{' A' , ' B' , ' C' , ' D' }};
651
+ Nui::val parent;
652
+
653
+ using Nui::Elements::div;
654
+ using Nui::Elements::body;
655
+ using namespace Nui ::Attributes;
656
+
657
+ render (body{reference = parent}(range (characters), [&characters](long long i, auto & element) {
658
+ element = ' X' ;
659
+ return div{}(std::string{element} + " :" + std::to_string (i));
660
+ }));
661
+
662
+ EXPECT_EQ (parent[" children" ][" length" ].as <long long >(), static_cast <long long >(characters.size ()));
663
+ for (int i = 0 ; i != characters.size (); ++i)
664
+ {
665
+ EXPECT_EQ (parent[" children" ][i][" textContent" ].as <std::string>(), " X:" + std::to_string (i));
666
+ }
667
+ }
668
+
669
+ TEST_F (TestRanges, StaticRangeRendererCanTakeConstObserved)
670
+ {
671
+ std::vector<char > characters{' A' , ' B' , ' C' , ' D' };
672
+ Nui::val parent;
673
+ Nui::Observed<bool > other{true };
674
+
675
+ using Nui::Elements::div;
676
+ using Nui::Elements::body;
677
+ using namespace Nui ::Attributes;
678
+
679
+ auto doRender = [&](Nui::Observed<bool > const & constObserved) {
680
+ render (body{reference = parent}(
681
+ range (characters, constObserved), [&characters](long long i, auto const & element) {
682
+ return div{}(std::string{element} + " :" + std::to_string (i));
683
+ }));
684
+ };
685
+ doRender (other);
686
+
687
+ EXPECT_EQ (parent[" children" ][" length" ].as <long long >(), static_cast <long long >(characters.size ()));
688
+ for (int i = 0 ; i != characters.size (); ++i)
689
+ {
690
+ EXPECT_EQ (
691
+ parent[" children" ][i][" textContent" ].as <std::string>(),
692
+ std::string{characters[i]} + " :" + std::to_string (i));
693
+ }
694
+ }
695
+
696
+ TEST_F (TestRanges, CanUseObservedNonRandomAccessRange)
697
+ {
698
+ Nui::Observed<std::set<char >> characters{{' A' , ' B' , ' C' , ' D' }};
699
+ Nui::val parent;
700
+
701
+ using Nui::Elements::div;
702
+ using Nui::Elements::body;
703
+ using namespace Nui ::Attributes;
704
+
705
+ render (body{reference = parent}(range (characters), [&characters](long long i, auto const & element) {
706
+ return div{}(std::string{element} + " :" + std::to_string (i));
707
+ }));
708
+
709
+ EXPECT_EQ (parent[" children" ][" length" ].as <long long >(), static_cast <long long >(characters.size ()));
710
+ int i = 0 ;
711
+ for (auto const & elem : characters.value ())
712
+ {
713
+ EXPECT_EQ (
714
+ parent[" children" ][i][" textContent" ].as <std::string>(), std::string{elem} + " :" + std::to_string (i));
715
+ ++i;
716
+ }
717
+ }
718
+
719
+ TEST_F (TestRanges, CanUseStaticNonRandomAccessRange)
720
+ {
721
+ std::set<char > characters{' A' , ' B' , ' C' , ' D' };
722
+ Nui::val parent;
723
+
724
+ using Nui::Elements::div;
725
+ using Nui::Elements::body;
726
+ using namespace Nui ::Attributes;
727
+
728
+ render (body{reference = parent}(range (characters), [&characters](long long i, auto const & element) {
729
+ return div{}(std::string{element} + " :" + std::to_string (i));
730
+ }));
731
+
732
+ EXPECT_EQ (parent[" children" ][" length" ].as <long long >(), static_cast <long long >(characters.size ()));
733
+ int i = 0 ;
734
+ for (auto const & elem : characters)
735
+ {
736
+ EXPECT_EQ (
737
+ parent[" children" ][i][" textContent" ].as <std::string>(), std::string{elem} + " :" + std::to_string (i));
738
+ ++i;
739
+ }
740
+ }
626
741
}
0 commit comments