@@ -15,69 +15,54 @@ namespace ReqnrollFormatters.CustomizedHtml;
15
15
public class CustomRenderingHtmlFormatter ( IFormattersConfigurationProvider configurationProvider , IFormatterLog logger , IFileSystem fileSystem )
16
16
: HtmlFormatter ( configurationProvider , logger , fileSystem , "customRenderingHtml" )
17
17
{
18
- private class CustomRenderingResourceProvider : IResourceProvider
18
+ private string LoadJavascriptResourceWithCustomRenderFunction ( string customRenderScript )
19
19
{
20
- private readonly IResourceProvider _baseResourceProvider = new DefaultResourceProvider ( ) ;
20
+ string originalResource = new HtmlReportSettings ( ) . JavascriptResourceLoader ( ) ;
21
+ var globalVarsMatch = Regex . Match ( originalResource , @"\.render\((?<reactObj>[\w\.]+)\.createElement\((?<cucComps>[\w\.]+)\.EnvelopesProvider" ) ;
22
+ if ( ! globalVarsMatch . Success )
23
+ throw new InvalidOperationException ( "Could not find global variables in main.js resource. The regex did not match: " + originalResource ) ;
24
+ var reactObj = globalVarsMatch . Groups [ "reactObj" ] . Value ;
25
+ var cucumberReactComponents = globalVarsMatch . Groups [ "cucComps" ] . Value ;
21
26
22
- public string GetTemplateResource ( )
23
- {
24
- // No template customization needed for custom rendering
25
- return _baseResourceProvider . GetTemplateResource ( ) ;
26
- }
27
-
28
- public string GetCssResource ( )
29
- {
30
- // No CSS customization needed for custom rendering
31
- return _baseResourceProvider . GetCssResource ( ) ;
32
- }
33
-
34
- public string GetJavaScriptResource ( )
35
- {
36
- string originalResource = _baseResourceProvider . GetJavaScriptResource ( ) ;
37
- var globalVarsMatch = Regex . Match ( originalResource , @"\.render\((?<reactObj>[\w\.]+)\.createElement\((?<cucComps>[\w\.]+)\.EnvelopesProvider" ) ;
38
- if ( ! globalVarsMatch . Success )
39
- throw new InvalidOperationException ( "Could not find global variables in main.js resource. The regex did not match: " + originalResource ) ;
40
- var reactObj = globalVarsMatch . Groups [ "reactObj" ] . Value ;
41
- var cucumberReactComponents = globalVarsMatch . Groups [ "cucComps" ] . Value ;
42
-
43
- // Use customRender which completely customizes the rendering of DocString
44
- return
45
- """
46
- function customRender(reactObj, cucumberReactComponents, rootObj, renderArg) {
47
- var customRenderArg =
48
- reactObj.createElement(cucumberReactComponents.CustomRendering, {
49
- overrides: {
50
- DocString: (props) => (
51
- reactObj.createElement(
52
- reactObj.Fragment,
53
- null,
54
- reactObj.createElement(
55
- "p",
56
- null,
57
- "I am going to render this doc string in a textarea:"
58
- ),
59
- reactObj.createElement(
60
- "textarea",
61
- null,
62
- props.docString.content
63
- )
64
- )
65
- )
66
- }
67
- },
68
- renderArg
69
- );
70
- rootObj.render(customRenderArg);
71
- }
72
-
73
- """ +
74
- Regex . Replace ( originalResource , @"(?<rootObj>\(0,\w+\(\d+\).createRoot\)\(document.getElementById\(""content""\)\)).render\(" , "customRender(" + reactObj + "," + cucumberReactComponents + ", ${rootObj}," ) ;
75
- }
27
+ // Use customRender which completely customizes the rendering of DocString
28
+ return
29
+ customRenderScript +
30
+ Regex . Replace ( originalResource , @"(?<rootObj>\(0,\w+\(\d+\).createRoot\)\(document.getElementById\(""content""\)\)).render\(" , "customRender(" + reactObj + "," + cucumberReactComponents + ", ${rootObj}," ) ;
76
31
}
77
32
78
- protected override MessagesToHtmlWriter CreateMessagesToHtmlWriter ( Stream stream , Func < StreamWriter , Envelope , Task > asyncStreamSerializer )
33
+ protected override HtmlReportSettings GetHtmlReportSettings ( )
79
34
{
80
- var customResourceProvider = new CustomRenderingResourceProvider ( ) ;
81
- return new MessagesToHtmlWriter ( stream , asyncStreamSerializer , customResourceProvider ) ;
35
+ var customRenderScript =
36
+ """
37
+ function customRender(reactObj, cucumberReactComponents, rootObj, renderArg) {
38
+ var customRenderArg =
39
+ reactObj.createElement(cucumberReactComponents.CustomRendering, {
40
+ overrides: {
41
+ DocString: (props) => (
42
+ reactObj.createElement(
43
+ reactObj.Fragment,
44
+ null,
45
+ reactObj.createElement(
46
+ "p",
47
+ null,
48
+ "I am going to render this doc string in a textarea:"
49
+ ),
50
+ reactObj.createElement(
51
+ "textarea",
52
+ null,
53
+ props.docString.content
54
+ )
55
+ )
56
+ )
57
+ }
58
+ },
59
+ renderArg
60
+ );
61
+ rootObj.render(customRenderArg);
62
+ }
63
+ """ ;
64
+ var settings = base . GetHtmlReportSettings ( ) ;
65
+ settings . JavascriptResourceLoader = ( ) => LoadJavascriptResourceWithCustomRenderFunction ( customRenderScript ) ;
66
+ return settings ;
82
67
}
83
68
}
0 commit comments