Skip to content

Commit 70f17bc

Browse files
committed
fix: add syntax highlighted markdown tests
1 parent 9a4faf5 commit 70f17bc

File tree

2 files changed

+54
-20
lines changed

2 files changed

+54
-20
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import React from "react";
2+
import ReactDOM from "react-dom";
3+
import MarkdownDescription from "./MarkdownDescription";
4+
5+
it("renders without crashing", () => {
6+
const div = document.createElement("div");
7+
ReactDOM.render(<MarkdownDescription uiSchema={{}} />, div);
8+
ReactDOM.unmountComponentAtNode(div);
9+
});
10+
11+
it("renders a description", () => {
12+
const div = document.createElement("div");
13+
ReactDOM.render(<MarkdownDescription uiSchema={{}} source={"foo"}/>, div);
14+
expect(div.innerHTML).toContain("foo");
15+
ReactDOM.unmountComponentAtNode(div);
16+
});
17+
18+
it("renders a description with syntax highlighting", () => {
19+
const div = document.createElement("div");
20+
ReactDOM.render(<MarkdownDescription uiSchema={{}} source={"```javascript\n\nconst foo = 'bar';\n\n```"}/>, div);
21+
expect(div.innerHTML).toContain("language-javascript");
22+
ReactDOM.unmountComponentAtNode(div);
23+
});
24+
25+
it("renders a description with darkmode syntax highlighting", () => {
26+
const div = document.createElement("div");
27+
ReactDOM.render(<MarkdownDescription uiSchema={{appBar: {"ui:darkMode": true}}} source={"```javascript\n\nconst foo = 'bar';\n\n```"}/>, div);
28+
expect(div.innerHTML).toContain("language-javascript");
29+
ReactDOM.unmountComponentAtNode(div);
30+
});
31+
32+
it("renders a description that errors", () => {
33+
const div = document.createElement("div");
34+
ReactDOM.render(<MarkdownDescription uiSchema={{}} source={"```"}/>, div);
35+
ReactDOM.unmountComponentAtNode(div);
36+
});

src/MarkdownDescription/MarkdownDescription.tsx

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React from "react";
22
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
33
import { materialDark, materialLight } from "react-syntax-highlighter/dist/cjs/styles/prism";
44
import ReactMarkdown from "react-markdown";
5-
import { Container } from "@material-ui/core";
65

76
interface IProps {
87
className?: string;
@@ -11,25 +10,24 @@ interface IProps {
1110
}
1211

1312
const MarkdownDescription: React.FC<IProps> = ({ source, className, uiSchema }) => {
14-
try {
15-
return (
16-
<ReactMarkdown
17-
renderers={{
18-
code: ({ language, value }) => {
19-
return <SyntaxHighlighter
20-
style={uiSchema && uiSchema.appBar["ui:darkMode"] ? materialDark : materialLight}
21-
language={language}
22-
children={value}
23-
/>;
24-
},
25-
}}
26-
source={source}
27-
className={className}
28-
/>
29-
);
30-
} catch (e) {
31-
return <ReactMarkdown source={source} className={className} />;
32-
}
13+
return (
14+
<ReactMarkdown
15+
renderers={{
16+
code: ({ language, value }) => {
17+
if (!value) {
18+
return <pre><code></code></pre>;
19+
}
20+
return <SyntaxHighlighter
21+
style={uiSchema && uiSchema.appBar && uiSchema.appBar["ui:darkMode"] ? materialDark : materialLight}
22+
language={language}
23+
children={value}
24+
/>;
25+
},
26+
}}
27+
source={source}
28+
className={className}
29+
/>
30+
);
3331
};
3432

3533
export default MarkdownDescription;

0 commit comments

Comments
 (0)