From 14ccc085d02d19afc2a968edb70cc995032cfb0c Mon Sep 17 00:00:00 2001 From: Clark Fischer Date: Fri, 13 Jan 2023 14:05:18 -0800 Subject: [PATCH] Use correct highlight.js call Previous call signature was deprecated. See https://github.com/highlightjs/highlight.js/issues/2277 Signed-off-by: Clark Fischer --- .../views/elements/SyntaxHighlight.tsx | 3 +- .../views/elements/SyntaxHighlight-test.tsx | 38 +++++++++++++++++++ .../SyntaxHighlight-test.tsx.snap | 30 +++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 test/components/views/elements/SyntaxHighlight-test.tsx create mode 100644 test/components/views/elements/__snapshots__/SyntaxHighlight-test.tsx.snap diff --git a/src/components/views/elements/SyntaxHighlight.tsx b/src/components/views/elements/SyntaxHighlight.tsx index 886c68c9165b..3e8828d94ef7 100644 --- a/src/components/views/elements/SyntaxHighlight.tsx +++ b/src/components/views/elements/SyntaxHighlight.tsx @@ -1,5 +1,6 @@ /* Copyright 2017 Michael Telatynski <7t3chguy@gmail.com> +Copyright 2023 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,7 +26,7 @@ interface IProps { export default class SyntaxHighlight extends React.PureComponent { public render(): JSX.Element { const { children: content, language } = this.props; - const highlighted = language ? hljs.highlight(language, content) : hljs.highlightAuto(content); + const highlighted = language ? hljs.highlight(content, { language }) : hljs.highlightAuto(content); return (
diff --git a/test/components/views/elements/SyntaxHighlight-test.tsx b/test/components/views/elements/SyntaxHighlight-test.tsx
new file mode 100644
index 000000000000..4b9b90ef2b7a
--- /dev/null
+++ b/test/components/views/elements/SyntaxHighlight-test.tsx
@@ -0,0 +1,38 @@
+/* eslint @typescript-eslint/no-unused-vars: ["error", { "varsIgnorePattern": "^_" }] */
+/*
+Copyright 2023 The Matrix.org Foundation C.I.C.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import { render } from "@testing-library/react";
+import hljs from "highlight.js";
+import React from "react";
+
+import SyntaxHighlight from "../../../../src/components/views/elements/SyntaxHighlight";
+
+describe("", () => {
+    it("renders", () => {
+        const { container } = render(console.log("Hello, World!"););
+        expect(container).toMatchSnapshot();
+    });
+
+    it.each(["json", "javascript", "css"])("uses the provided language", (lang) => {
+        const mock = jest.spyOn(hljs, "highlight");
+
+        render(// Hello, World);
+
+        const [_lang, opts] = mock.mock.lastCall!;
+        expect(opts["language"]).toBe(lang);
+    });
+});
diff --git a/test/components/views/elements/__snapshots__/SyntaxHighlight-test.tsx.snap b/test/components/views/elements/__snapshots__/SyntaxHighlight-test.tsx.snap
new file mode 100644
index 000000000000..e7ad9c057b0d
--- /dev/null
+++ b/test/components/views/elements/__snapshots__/SyntaxHighlight-test.tsx.snap
@@ -0,0 +1,30 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[` renders 1`] = `
+
+
+    
+      
+        console
+      
+      .
+      
+        log
+      
+      (
+      
+        "Hello, World!"
+      
+      );
+    
+  
+
+`;