11<!doctype html>
22< html lang ="en-US ">
3-
4- < head >
5- < link href ="/assets/index.css " rel ="stylesheet " type ="text/css " />
6- < script crossorigin ="anonymous " src ="https://unpkg.com/@babel/standalone@7.8.7/babel.min.js "> </ script >
7- < script crossorigin ="anonymous " src ="https://unpkg.com/react@16.8.6/umd/react.development.js "> </ script >
8- < script crossorigin ="anonymous " src ="https://unpkg.com/react-dom@16.8.6/umd/react-dom.development.js "> </ script >
9- <!-- <script src="https://unpkg.com/preact@10.25.4/dist/preact.umd.js"></script>
3+ < head >
4+ < link href ="/assets/index.css " rel ="stylesheet " type ="text/css " />
5+ < script crossorigin ="anonymous " src ="https://unpkg.com/@babel/standalone@7.8.7/babel.min.js "> </ script >
6+ < script src ="https://unpkg.com/preact@10.25.4/dist/preact.umd.js "> </ script >
107 < script src ="https://unpkg.com/preact@10.25.4/hooks/dist/hooks.umd.js "> </ script >
118 < script src ="https://unpkg.com/preact@10.25.4/compat/dist/compat.umd.js "> </ script >
129 < script >
1310 // Expose Preact's compat as React for WebChat
1411 window . React = preactCompat ;
1512 window . ReactDOM = preactCompat ;
16- </script> -->
17- < script crossorigin ="anonymous " src ="/test-harness.js "> </ script >
18- < script crossorigin ="anonymous " src ="/test-page-object.js "> </ script >
19- < script crossorigin ="anonymous " src ="/__dist__/webchat-es5.js "> </ script >
20- < script crossorigin ="anonymous " src ="/__dist__/botframework-webchat-fluent-theme.development.js "> </ script >
21-
22- < style >
23- .bold {
24- font-weight : bold;
25- }
26-
27- .italic {
28- font-style : italic;
29- }
30-
31- .subtle {
32- color : # 999 ;
33- }
34-
35- main {
36- position : relative;
37- }
38-
39- pre {
40- }
41- </ style >
42- </ head >
43-
44- < body >
45- < main id ="webchat "> </ main >
46- < script type ="text/babel ">
47- run = fn => fn ( ) ;
48- run ( async function ( ) {
49- const {
50- React,
51- ReactDOM : { render } ,
52- WebChat : { FluentThemeProvider, ReactWebChat, templateDecorator }
53- } = window ; // Imports in UMD fashion.
54-
55-
56- const testDecorator = templateDecorator ( 'TestDecorator' ) ;
57-
58- const FinalComponent = ( { children, ...props } ) => (
59- < >
60- { children } < pre > { JSON . stringify ( props , null , 2 ) } </ pre >
61- </ >
62- ) ;
63-
64- console . log ( testDecorator ) ;
65-
66- const { Provider, Proxy, createMiddleware } = testDecorator ;
67-
68- const { directLine, store } = testHelpers . createDirectLineEmulator ( ) ;
69-
70- // render(
71- // <Provider middleware={[createMiddleware(FinalComponent)]}>
72- // <Provider
73- // middleware={[
74- // createMiddleware(({ Next, children, ...props }) =>
75- // <Next {...props} foo={123}>
76- // _foo={props.foo}
77- // {children}c
78- // </Next>),
79- // createMiddleware(({ Next, children, ...props }) =>
80- // <Next {...props}>
81- // {children}a
82- // </Next>),
83- // ]}>
84- // <Provider
85- // middleware={[
86- // createMiddleware(({ Next, children, ...props }) =>
87- // <Next {...props}>
88- // {children}b
89- // </Next>)
90- // ]}>
91- // <Proxy foo="bar" />
92- // </Provider>
93- // <Proxy bar="buz" children="hello" />
94- // </Provider>
95- // <Proxy bar="buz" children="hello" />
96- // </Provider>,
97- // document.getElementById('webchat')
98- // );
99-
100-
101- const ApplyClass = ( { Next, children, className, ...rest } ) => < Next { ...rest } > < span className = { className } > { children } </ span > </ Next > ;
102-
103- const ApplyBold = ( { Next, children, bold, className = '' , ...rest } ) => (
104- < Next { ...rest } className = { bold ? className + ' bold' : className } >
105- { children }
106- </ Next >
107- ) ;
108-
109- const ApplyItalic = ( { Next, children, italic, className = '' , ...rest } ) => (
110- < Next { ...rest } className = { italic ? className + ' italic' : className } >
111- { children }
112- </ Next >
113- ) ;
114-
115- const RandomChild = ( { Next, children, ...rest } ) => (
116- < Next { ...rest } >
117- { children } { React . useState ( ( ) => Math . random ( ) . toFixed ( 2 ) ) [ 0 ] }
118- </ Next >
119- ) ;
120-
121- const UpdateState = ( { Next, children, state = [ 0 , ( ) => { } ] , ...rest } ) => {
122- const [ value , setValue ] = state ;
123- return (
124- < Next { ...rest } >
125- { children } { value }
126- < button onClick = { ( ) => setValue ( Math . random ( ) . toFixed ( 2 ) ) } > Update</ button >
127- </ Next >
13+ </ script >
14+ < script crossorigin ="anonymous " src ="/test-harness.js "> </ script >
15+ < script crossorigin ="anonymous " src ="/test-page-object.js "> </ script >
16+ < script crossorigin ="anonymous " src ="/__dist__/webchat-es5.js "> </ script >
17+ < script crossorigin ="anonymous " src ="/__dist__/botframework-webchat-fluent-theme.production.min.js "> </ script >
18+ </ head >
19+ < body >
20+ < main id ="webchat "> </ main >
21+ < script type ="text/babel ">
22+ run ( async function ( ) {
23+ const {
24+ React,
25+ ReactDOM : { render } ,
26+ WebChat : { FluentThemeProvider, ReactWebChat }
27+ } = window ; // Imports in UMD fashion.
28+
29+ const { directLine, store } = testHelpers . createDirectLineEmulator ( ) ;
30+
31+ const App = ( ) => < ReactWebChat directLine = { directLine } store = { store } /> ;
32+
33+ render (
34+ < FluentThemeProvider >
35+ < App />
36+ </ FluentThemeProvider > ,
37+ document . getElementById ( 'webchat' )
12838 ) ;
129- } ;
130-
131- const App = ( ) => (
132- < Provider middleware = { [ createMiddleware ( ApplyBold ) , createMiddleware ( RandomChild ) , createMiddleware ( UpdateState ) , createMiddleware ( ApplyItalic ) , createMiddleware ( ApplyClass ) , createMiddleware ( FinalComponent ) ] } >
133- < Proxy bold = { true } italic = { true } state = { React . useState ( ) } request = { { foo : 'bar' } } >
134- hello
135- </ Proxy >
136- < Proxy italic = { true } className = "subtle" request = { { bar : 'buz' } } >
137- world
138- </ Proxy >
139- </ Provider >
140- ) ;
141-
142- render ( < App /> ,
143- document . getElementById ( 'webchat' )
144- )
14539
146- await pageConditions . uiConnected ( ) ;
40+ await pageConditions . uiConnected ( ) ;
14741
148- await directLine . emulateIncomingActivity (
149- 'Eiusmod anim adipisicing cupidatat adipisicing officia sint qui consequat veniam id aute.'
150- ) ;
151-
152- await pageConditions . numActivitiesShown ( 1 ) ;
42+ await directLine . emulateIncomingActivity (
43+ 'Eiusmod anim adipisicing cupidatat adipisicing officia sint qui consequat veniam id aute.'
44+ ) ;
15345
154- // THEN: Fluent theme should be loaded.
155- const buildInfo = Object . fromEntries (
156- document
157- . querySelector ( 'head > meta[name="botframework-webchat:fluent-theme"]' )
158- . content . split ( ';' )
159- . map ( value => value . trim ( ) . split ( '=' ) )
160- ) ;
46+ await pageConditions . numActivitiesShown ( 1 ) ;
16147
162- expect ( buildInfo ) . toHaveProperty ( 'build-tool' , 'tsup' ) ;
163- expect ( buildInfo ) . toHaveProperty ( 'module-format' , 'esmodules' ) ;
164- expect ( buildInfo . version ) . toMatch ( / ^ \d + \. \d + \. \d + ( $ | - ) / u) ;
48+ // THEN: Fluent theme should be loaded.
49+ const buildInfo = Object . fromEntries (
50+ document
51+ . querySelector ( 'head > meta[name="botframework-webchat:fluent-theme"]' )
52+ . content . split ( ';' )
53+ . map ( value => value . trim ( ) . split ( '=' ) )
54+ ) ;
16555
166- expect ( window . WebChat . FluentThemeProvider ) . toBeTruthy ( ) ;
56+ expect ( buildInfo ) . toHaveProperty ( 'build-tool' , 'tsup' ) ;
57+ expect ( buildInfo ) . toHaveProperty ( 'module-format' , 'esmodules' ) ;
58+ expect ( buildInfo . version ) . toMatch ( / ^ \d + \. \d + \. \d + ( $ | - ) / u) ;
16759
168- // THEN: Should render the activity.
169- await host . snapshot ( 'local' ) ;
170- } ) ;
171- </ script >
172- </ body >
60+ expect ( window . WebChat . FluentThemeProvider ) . toBeTruthy ( ) ;
17361
174- </ html >
62+ // THEN: Should render the activity.
63+ await host . snapshot ( 'local' ) ;
64+ } ) ;
65+ </ script >
66+ </ body >
67+ </ html >
0 commit comments