@@ -629,6 +629,7 @@ describeWithDOM('mount', () => {
629
629
const a = < div className = "foo" /> ;
630
630
const b = < div className = "foo" /> ;
631
631
const c = < div className = "bar" /> ;
632
+
632
633
expect ( mount ( a ) . equals ( b ) ) . to . equal ( true ) ;
633
634
expect ( mount ( a ) . equals ( c ) ) . to . equal ( false ) ;
634
635
} ) ;
@@ -656,7 +657,7 @@ describeWithDOM('mount', () => {
656
657
expect ( wrapper . equals ( b ) ) . to . equal ( true ) ;
657
658
} ) ;
658
659
659
- it . skip ( 'does not expand `node` content' , ( ) => {
660
+ it ( 'does not expand `node` content' , ( ) => {
660
661
class Bar extends React . Component {
661
662
render ( ) { return < div /> ; }
662
663
}
@@ -665,8 +666,9 @@ describeWithDOM('mount', () => {
665
666
render ( ) { return < Bar /> ; }
666
667
}
667
668
668
- expect ( mount ( < Foo /> ) . equals ( < Bar /> ) ) . to . equal ( true ) ;
669
- expect ( mount ( < Foo /> ) . equals ( < Foo /> ) ) . to . equal ( false ) ;
669
+ const wrapper = mount ( < Foo /> ) . children ( ) ;
670
+ expect ( wrapper . equals ( < Bar /> ) ) . to . equal ( true ) ;
671
+ expect ( wrapper . equals ( < Foo /> ) ) . to . equal ( false ) ;
670
672
} ) ;
671
673
672
674
describeIf ( is ( '> 0.13' ) , 'stateless function components (SFCs)' , ( ) => {
@@ -684,7 +686,7 @@ describeWithDOM('mount', () => {
684
686
expect ( wrapper . equals ( b ) ) . to . equal ( true ) ;
685
687
} ) ;
686
688
687
- it . skip ( 'does not expand `node` content' , ( ) => {
689
+ it ( 'does not expand `node` content' , ( ) => {
688
690
const Bar = ( ) => (
689
691
< div />
690
692
) ;
@@ -693,12 +695,13 @@ describeWithDOM('mount', () => {
693
695
< Bar />
694
696
) ;
695
697
696
- expect ( mount ( < Foo /> ) . equals ( < Bar /> ) ) . to . equal ( true ) ;
697
- expect ( mount ( < Foo /> ) . equals ( < Foo /> ) ) . to . equal ( false ) ;
698
+ const wrapper = mount ( < Foo /> ) . children ( ) ;
699
+ expect ( wrapper . equals ( < Bar /> ) ) . to . equal ( true ) ;
700
+ expect ( wrapper . equals ( < Foo /> ) ) . to . equal ( false ) ;
698
701
} ) ;
699
702
} ) ;
700
703
701
- it . skip ( 'flattens arrays of children to compare' , ( ) => {
704
+ it ( 'flattens arrays of children to compare' , ( ) => {
702
705
class TwoChildren extends React . Component {
703
706
render ( ) {
704
707
return (
@@ -720,8 +723,8 @@ describeWithDOM('mount', () => {
720
723
) ;
721
724
}
722
725
}
723
- const twoChildren = mount ( < TwoChildren /> ) ;
724
- const twoChildrenOneArrayed = mount ( < TwoChildrenOneArrayed /> ) ;
726
+ const twoChildren = mount ( < TwoChildren /> ) . children ( ) ;
727
+ const twoChildrenOneArrayed = mount ( < TwoChildrenOneArrayed /> ) . children ( ) ;
725
728
726
729
expect ( twoChildren . equals ( twoChildrenOneArrayed . getElement ( ) ) ) . to . equal ( true ) ;
727
730
expect ( twoChildrenOneArrayed . equals ( twoChildren . getElement ( ) ) ) . to . equal ( true ) ;
@@ -752,6 +755,100 @@ describeWithDOM('mount', () => {
752
755
expect ( hostNodes . filter ( 'div' ) ) . to . have . lengthOf ( 1 ) ;
753
756
expect ( hostNodes . filter ( 'span' ) ) . to . have . lengthOf ( 1 ) ;
754
757
} ) ;
758
+
759
+ it ( 'does NOT allow matches on a nested node' , ( ) => {
760
+ const wrapper = mount ( (
761
+ < div >
762
+ < div className = "foo" />
763
+ </ div >
764
+ ) ) ;
765
+ const b = < div className = "foo" /> ;
766
+ expect ( wrapper . equals ( b ) ) . to . equal ( false ) ;
767
+ } ) ;
768
+
769
+ it ( 'matches composite components' , ( ) => {
770
+ class Foo extends React . Component {
771
+ render ( ) { return < div /> ; }
772
+ }
773
+ const wrapper = mount ( (
774
+ < div >
775
+ < Foo />
776
+ </ div >
777
+ ) ) ;
778
+ const b = < div > < Foo /> </ div > ;
779
+ expect ( wrapper . equals ( b ) ) . to . equal ( true ) ;
780
+ } ) ;
781
+
782
+ it . skip ( 'does not expand `node` content' , ( ) => {
783
+ class Bar extends React . Component {
784
+ render ( ) { return < div /> ; }
785
+ }
786
+
787
+ class Foo extends React . Component {
788
+ render ( ) { return < Bar /> ; }
789
+ }
790
+
791
+ expect ( mount ( < Foo /> ) . equals ( < Bar /> ) ) . to . equal ( true ) ;
792
+ expect ( mount ( < Foo /> ) . equals ( < Foo /> ) ) . to . equal ( false ) ;
793
+ } ) ;
794
+
795
+ describeIf ( is ( '> 0.13' ) , 'stateless function components (SFCs)' , ( ) => {
796
+ it ( 'matches composite SFCs' , ( ) => {
797
+ const Foo = ( ) => (
798
+ < div />
799
+ ) ;
800
+
801
+ const wrapper = mount ( (
802
+ < div >
803
+ < Foo />
804
+ </ div >
805
+ ) ) ;
806
+ const b = < div > < Foo /> </ div > ;
807
+ expect ( wrapper . equals ( b ) ) . to . equal ( true ) ;
808
+ } ) ;
809
+
810
+ it . skip ( 'does not expand `node` content' , ( ) => {
811
+ const Bar = ( ) => (
812
+ < div />
813
+ ) ;
814
+
815
+ const Foo = ( ) => (
816
+ < Bar />
817
+ ) ;
818
+
819
+ expect ( mount ( < Foo /> ) . equals ( < Bar /> ) ) . to . equal ( true ) ;
820
+ expect ( mount ( < Foo /> ) . equals ( < Foo /> ) ) . to . equal ( false ) ;
821
+ } ) ;
822
+ } ) ;
823
+
824
+ it . skip ( 'flattens arrays of children to compare' , ( ) => {
825
+ class TwoChildren extends React . Component {
826
+ render ( ) {
827
+ return (
828
+ < div className = "parent-component-class" >
829
+ < div key = "a" className = "asd" />
830
+ < div key = "b" className = "fgh" />
831
+ </ div >
832
+ ) ;
833
+ }
834
+ }
835
+
836
+ class TwoChildrenOneArrayed extends React . Component {
837
+ render ( ) {
838
+ return (
839
+ < div className = "parent-component-class" >
840
+ < div key = "a" className = "asd" />
841
+ { [ < div key = "b" className = "fgh" /> ] }
842
+ </ div >
843
+ ) ;
844
+ }
845
+ }
846
+ const twoChildren = mount ( < TwoChildren /> ) ;
847
+ const twoChildrenOneArrayed = mount ( < TwoChildrenOneArrayed /> ) ;
848
+
849
+ expect ( twoChildren . equals ( twoChildrenOneArrayed . getElement ( ) ) ) . to . equal ( true ) ;
850
+ expect ( twoChildrenOneArrayed . equals ( twoChildren . getElement ( ) ) ) . to . equal ( true ) ;
851
+ } ) ;
755
852
} ) ;
756
853
757
854
wrap ( )
@@ -1729,7 +1826,7 @@ describeWithDOM('mount', () => {
1729
1826
render ( ) {
1730
1827
return (
1731
1828
< div className = { this . props . id } >
1732
- { this . props . id }
1829
+ { this . props . foo }
1733
1830
</ div >
1734
1831
) ;
1735
1832
}
@@ -1740,6 +1837,144 @@ describeWithDOM('mount', () => {
1740
1837
expect ( wrapper . find ( '.bar' ) ) . to . have . lengthOf ( 1 ) ;
1741
1838
} ) ;
1742
1839
1840
+ describe ( 'merging props' , ( ) => {
1841
+ it ( 'merges, not replaces, props when rerendering' , ( ) => {
1842
+ class Foo extends React . Component {
1843
+ render ( ) {
1844
+ return (
1845
+ < div className = { this . props . id } >
1846
+ { this . props . foo }
1847
+ </ div >
1848
+ ) ;
1849
+ }
1850
+ }
1851
+
1852
+ const wrapper = mount ( < Foo id = "foo" foo = "bar" /> ) ;
1853
+
1854
+ expect ( wrapper . children ( ) . debug ( ) ) . to . equal ( `
1855
+ <div className="foo">
1856
+ bar
1857
+ </div>
1858
+ ` . trim ( ) ) ;
1859
+ expect ( wrapper . children ( ) . props ( ) ) . to . eql ( {
1860
+ className : 'foo' ,
1861
+ children : 'bar' ,
1862
+ } ) ;
1863
+ expect ( wrapper . instance ( ) . props ) . to . eql ( {
1864
+ id : 'foo' ,
1865
+ foo : 'bar' ,
1866
+ } ) ;
1867
+
1868
+ wrapper . setProps ( { id : 'bar' } ) ;
1869
+
1870
+ expect ( wrapper . children ( ) . debug ( ) ) . to . equal ( `
1871
+ <div className="bar">
1872
+ bar
1873
+ </div>
1874
+ ` . trim ( ) ) ;
1875
+ expect ( wrapper . children ( ) . props ( ) ) . to . eql ( {
1876
+ className : 'bar' ,
1877
+ children : 'bar' ,
1878
+ } ) ;
1879
+ expect ( wrapper . instance ( ) . props ) . to . eql ( {
1880
+ id : 'bar' ,
1881
+ foo : 'bar' ,
1882
+ } ) ;
1883
+ } ) ;
1884
+
1885
+ itIf ( is ( '> 0.13' ) , 'merges, not replaces, props on SFCs' , ( ) => {
1886
+ function Foo ( { id, foo } ) {
1887
+ return (
1888
+ < div className = { id } >
1889
+ { foo }
1890
+ </ div >
1891
+ ) ;
1892
+ }
1893
+ const wrapper = mount ( < Foo id = "foo" foo = "bar" /> ) ;
1894
+
1895
+ expect ( wrapper . children ( ) . debug ( ) ) . to . equal ( `
1896
+ <div className="foo">
1897
+ bar
1898
+ </div>
1899
+ ` . trim ( ) ) ;
1900
+ expect ( wrapper . children ( ) . props ( ) ) . to . eql ( {
1901
+ className : 'foo' ,
1902
+ children : 'bar' ,
1903
+ } ) ;
1904
+ if ( is ( '< 16' ) ) {
1905
+ expect ( wrapper . instance ( ) . props ) . to . eql ( {
1906
+ id : 'foo' ,
1907
+ foo : 'bar' ,
1908
+ } ) ;
1909
+ }
1910
+
1911
+ wrapper . setProps ( { id : 'bar' } ) ;
1912
+
1913
+ expect ( wrapper . children ( ) . debug ( ) ) . to . equal ( `
1914
+ <div className="bar">
1915
+ bar
1916
+ </div>
1917
+ ` . trim ( ) ) ;
1918
+ expect ( wrapper . children ( ) . props ( ) ) . to . eql ( {
1919
+ className : 'bar' ,
1920
+ children : 'bar' ,
1921
+ } ) ;
1922
+ if ( is ( '< 16' ) ) {
1923
+ expect ( wrapper . instance ( ) . props ) . to . eql ( {
1924
+ id : 'bar' ,
1925
+ foo : 'bar' ,
1926
+ } ) ;
1927
+ }
1928
+ } ) ;
1929
+
1930
+ it ( 'merges, not replaces, props when no rerender is needed' , ( ) => {
1931
+ class Foo extends React . Component {
1932
+ shouldComponentUpdate ( ) {
1933
+ return false ;
1934
+ }
1935
+
1936
+ render ( ) {
1937
+ return (
1938
+ < div className = { this . props . id } >
1939
+ { this . props . foo }
1940
+ </ div >
1941
+ ) ;
1942
+ }
1943
+ }
1944
+ const wrapper = mount ( < Foo id = "foo" foo = "bar" /> ) ;
1945
+
1946
+ expect ( wrapper . children ( ) . debug ( ) ) . to . equal ( `
1947
+ <div className="foo">
1948
+ bar
1949
+ </div>
1950
+ ` . trim ( ) ) ;
1951
+ expect ( wrapper . children ( ) . props ( ) ) . to . eql ( {
1952
+ className : 'foo' ,
1953
+ children : 'bar' ,
1954
+ } ) ;
1955
+ expect ( wrapper . instance ( ) . props ) . to . eql ( {
1956
+ id : 'foo' ,
1957
+ foo : 'bar' ,
1958
+ } ) ;
1959
+
1960
+ wrapper . setProps ( { id : 'foo' } ) ;
1961
+
1962
+ expect ( wrapper . children ( ) . debug ( ) ) . to . equal ( `
1963
+ <div className="foo">
1964
+ bar
1965
+ </div>
1966
+ ` . trim ( ) ) ;
1967
+ expect ( wrapper . children ( ) . props ( ) ) . to . eql ( {
1968
+ className : 'foo' ,
1969
+ children : 'bar' ,
1970
+ } ) ;
1971
+ expect ( wrapper . instance ( ) . props ) . to . eql ( {
1972
+ id : 'foo' ,
1973
+ foo : 'bar' ,
1974
+ } ) ;
1975
+ } ) ;
1976
+ } ) ;
1977
+
1743
1978
it ( 'calls componentWillReceiveProps for new renders' , ( ) => {
1744
1979
const stateValue = { } ;
1745
1980
@@ -1798,7 +2033,9 @@ describeWithDOM('mount', () => {
1798
2033
}
1799
2034
class Bar extends React . Component {
1800
2035
render ( ) {
1801
- return < div /> ;
2036
+ return (
2037
+ < div />
2038
+ ) ;
1802
2039
}
1803
2040
}
1804
2041
@@ -1812,6 +2049,25 @@ describeWithDOM('mount', () => {
1812
2049
expect ( wrapper . props ( ) . d ) . to . equal ( 'e' ) ;
1813
2050
} ) ;
1814
2051
2052
+ it ( 'passes in old context' , ( ) => {
2053
+ class Foo extends React . Component {
2054
+ render ( ) {
2055
+ return (
2056
+ < div > { this . context . x } </ div >
2057
+ ) ;
2058
+ }
2059
+ }
2060
+
2061
+ Foo . contextTypes = { x : PropTypes . string } ;
2062
+
2063
+ const context = { x : 'yolo' } ;
2064
+ const wrapper = mount ( < Foo x = { 5 } /> , { context } ) ;
2065
+ expect ( wrapper . first ( 'div' ) . text ( ) ) . to . equal ( 'yolo' ) ;
2066
+
2067
+ wrapper . setProps ( { x : 5 } ) ; // Just force a re-render
2068
+ expect ( wrapper . first ( 'div' ) . text ( ) ) . to . equal ( 'yolo' ) ;
2069
+ } ) ;
2070
+
1815
2071
it ( 'uses defaultProps if new props includes undefined values' , ( ) => {
1816
2072
const initialState = { a : 42 } ;
1817
2073
const context = { b : 7 } ;
@@ -4289,6 +4545,12 @@ describeWithDOM('mount', () => {
4289
4545
} ) ;
4290
4546
} ) ;
4291
4547
4548
+ describe ( '.debug()' , ( ) => {
4549
+ it ( 'passes through to the debugNodes function' , ( ) => {
4550
+ expect ( mount ( < div /> ) . debug ( ) ) . to . equal ( '<div />' ) ;
4551
+ } ) ;
4552
+ } ) ;
4553
+
4292
4554
describe ( '.html()' , ( ) => {
4293
4555
it ( 'returns html of straight DOM elements' , ( ) => {
4294
4556
const wrapper = mount ( (
0 commit comments