@@ -539,7 +539,7 @@ describe('shallow', () => {
539539 let Consumer ;
540540
541541 beforeEach ( ( ) => {
542- ( { Provider, Consumer } = React . createContext ( 'howdy!' ) ) ;
542+ ( { Provider, Consumer } = createContext ( 'howdy!' ) ) ;
543543 } ) ;
544544
545545 class Consumes extends React . Component {
@@ -611,7 +611,7 @@ describe('shallow', () => {
611611 let Consumer ;
612612
613613 beforeEach ( ( ) => {
614- ( { Provider, Consumer } = React . createContext ( 'howdy!' ) ) ;
614+ ( { Provider, Consumer } = createContext ( 'howdy!' ) ) ;
615615 } ) ;
616616
617617 class Consumes extends React . Component {
@@ -666,6 +666,82 @@ describe('shallow', () => {
666666 expect ( consumer . text ( ) ) . to . equal ( 'foo' ) ;
667667 } ) ;
668668 } ) ;
669+
670+ describeIf ( is ( '>= 16.6' ) , 'shallow() on Provider and Consumer through .contextType' , ( ) => {
671+ let Provider ;
672+
673+ beforeEach ( ( ) => {
674+ ( { Provider } = createContext ( 'howdy!' ) ) ;
675+ } ) ;
676+
677+ class OuterComponent extends React . Component {
678+ render ( ) {
679+ const { value } = this . props ;
680+ return (
681+ < Provider value = { value } > < InnerComponent /> </ Provider >
682+ ) ;
683+ }
684+ }
685+
686+ class WrappingComponent extends React . Component {
687+ render ( ) {
688+ const { children, value } = this . props ;
689+ return (
690+ < Provider value = { value } > { children } </ Provider >
691+ ) ;
692+ }
693+ }
694+
695+ class InnerComponent extends React . Component {
696+ render ( ) {
697+ return this . context ;
698+ }
699+ }
700+
701+ InnerComponent . contextType = Provider ;
702+
703+ describe ( 'rendering the Provider directly' , ( ) => {
704+ it ( 'renders initial context value' , ( ) => {
705+ const wrapper = shallow ( < OuterComponent value = "foo" /> ) ;
706+ const provides = wrapper . find ( Provider ) . shallow ( ) ;
707+ const provider = provides . find ( InnerComponent ) . dive ( ) ;
708+
709+ expect ( provider . text ( ) ) . to . equal ( 'foo' ) ;
710+ } ) ;
711+
712+ it ( 'renders updated context value' , ( ) => {
713+ const wrapper = shallow ( < OuterComponent value = "foo" /> ) ;
714+ wrapper . setProps ( { value : 'bar' } ) ;
715+ const provides = wrapper . find ( Provider ) . shallow ( ) ;
716+ const provider = provides . find ( InnerComponent ) . dive ( ) ;
717+
718+ expect ( provider . text ( ) ) . to . equal ( 'bar' ) ;
719+ } ) ;
720+ } ) ;
721+
722+ describe ( 'rendering the Provider through wrappingComponent' , ( ) => {
723+ it ( 'renders initial context value' , ( ) => {
724+ const wrapper = shallow ( < InnerComponent /> , {
725+ wrappingComponent : WrappingComponent ,
726+ wrappingComponentProps : { value : 'foo' } ,
727+ } ) ;
728+
729+ expect ( wrapper . text ( ) ) . to . equal ( 'foo' ) ;
730+ } ) ;
731+
732+ it ( 'renders updated context value' , ( ) => {
733+ const wrapper = shallow ( < InnerComponent /> , {
734+ wrappingComponent : WrappingComponent ,
735+ wrappingComponentProps : { value : 'foo' } ,
736+ } ) ;
737+ const wrappingComponent = wrapper . getWrappingComponent ( ) ;
738+ wrappingComponent . setProps ( { value : 'bar' } ) ;
739+ wrappingComponent . rerender ( ) ;
740+
741+ expect ( wrapper . text ( ) ) . to . equal ( 'bar' ) ;
742+ } ) ;
743+ } ) ;
744+ } ) ;
669745 } ) ;
670746
671747 describeIf ( is ( '> 0.13' ) , 'stateless function components (SFCs)' , ( ) => {
0 commit comments