Path: blob/main/tests/unit/text-highlighting.test.ts
12924 views
/*1* text-highlighting.test.ts2*3* Copyright (C) 2020-2022 Posit Software, PBC4*/56import { unitTest } from "../test.ts";7import { assertEquals } from "testing/asserts";8import {9getHighlightTheme,10hasAdaptiveTheme,11hasTextHighlighting,12isAdaptiveTheme,13} from "../../src/quarto-core/text-highlighting.ts";14import { FormatPandoc } from "../../src/config/types.ts";1516// getHighlightTheme tests1718// deno-lint-ignore require-await19unitTest("getHighlightTheme - returns default when no options set", async () => {20const pandoc: FormatPandoc = {};21assertEquals(getHighlightTheme(pandoc), "arrow");22});2324// deno-lint-ignore require-await25unitTest("getHighlightTheme - returns syntax-highlighting when set", async () => {26const pandoc: FormatPandoc = { "syntax-highlighting": "github" };27assertEquals(getHighlightTheme(pandoc), "github");28});2930// deno-lint-ignore require-await31unitTest("getHighlightTheme - returns highlight-style as fallback", async () => {32const pandoc: FormatPandoc = { "highlight-style": "monokai" };33assertEquals(getHighlightTheme(pandoc), "monokai");34});3536// deno-lint-ignore require-await37unitTest("getHighlightTheme - syntax-highlighting takes precedence", async () => {38const pandoc: FormatPandoc = {39"syntax-highlighting": "github",40"highlight-style": "monokai",41};42assertEquals(getHighlightTheme(pandoc), "github");43});4445// hasTextHighlighting tests4647// deno-lint-ignore require-await48unitTest("text-highlighting - returns true when no options set (default applies)", async () => {49const pandoc: FormatPandoc = {};50assertEquals(hasTextHighlighting(pandoc), true);51});5253// deno-lint-ignore require-await54unitTest("text-highlighting - returns false when disabled with 'none'", async () => {55const pandoc: FormatPandoc = { "syntax-highlighting": "none" };56assertEquals(hasTextHighlighting(pandoc), false);57});5859// deno-lint-ignore require-await60unitTest("text-highlighting - returns true for explicit theme", async () => {61const pandoc: FormatPandoc = { "syntax-highlighting": "github" };62assertEquals(hasTextHighlighting(pandoc), true);63});6465// deno-lint-ignore require-await66unitTest("text-highlighting - returns true for deprecated highlight-style", async () => {67const pandoc: FormatPandoc = { "highlight-style": "monokai" };68assertEquals(hasTextHighlighting(pandoc), true);69});7071// deno-lint-ignore require-await72unitTest("text-highlighting - syntax-highlighting takes precedence over highlight-style", async () => {73// New option takes precedence - "none" disables regardless of deprecated option74const pandoc: FormatPandoc = {75"syntax-highlighting": "none",76"highlight-style": "github",77};78// "none" is truthy so it's selected, then hasTextHighlighting returns false79assertEquals(hasTextHighlighting(pandoc), false);80});8182// deno-lint-ignore require-await83unitTest("text-highlighting - returns false for deprecated highlight-style: none", async () => {84const pandoc: FormatPandoc = { "highlight-style": "none" };85assertEquals(hasTextHighlighting(pandoc), false);86});8788// isAdaptiveTheme tests8990// deno-lint-ignore require-await91unitTest("isAdaptiveTheme - returns true for known adaptive themes", async () => {92const adaptiveThemes = [93"a11y",94"arrow",95"atom-one",96"ayu",97"breeze",98"github",99"gruvbox",100"monochrome",101];102for (const theme of adaptiveThemes) {103assertEquals(isAdaptiveTheme(theme), true, `Expected ${theme} to be adaptive`);104}105});106107// deno-lint-ignore require-await108unitTest("isAdaptiveTheme - returns false for non-adaptive themes", async () => {109const nonAdaptiveThemes = ["monokai", "tango", "zenburn", "kate", "pygments"];110for (const theme of nonAdaptiveThemes) {111assertEquals(isAdaptiveTheme(theme), false, `Expected ${theme} to be non-adaptive`);112}113});114115// deno-lint-ignore require-await116unitTest("isAdaptiveTheme - returns true for object with dark and light", async () => {117const theme = { dark: "monokai", light: "tango" };118assertEquals(isAdaptiveTheme(theme), true);119});120121// deno-lint-ignore require-await122unitTest("isAdaptiveTheme - returns false for object without both dark and light", async () => {123// Only dark124assertEquals(isAdaptiveTheme({ dark: "monokai" }), false);125// Only light126assertEquals(isAdaptiveTheme({ light: "tango" }), false);127// Neither (empty object)128assertEquals(isAdaptiveTheme({}), false);129});130131// hasAdaptiveTheme tests132133// deno-lint-ignore require-await134unitTest("hasAdaptiveTheme - returns true for adaptive syntax-highlighting", async () => {135const pandoc: FormatPandoc = { "syntax-highlighting": "github" };136assertEquals(hasAdaptiveTheme(pandoc), true);137});138139// deno-lint-ignore require-await140unitTest("hasAdaptiveTheme - returns false for non-adaptive theme", async () => {141const pandoc: FormatPandoc = { "syntax-highlighting": "monokai" };142assertEquals(hasAdaptiveTheme(pandoc), false);143});144145// deno-lint-ignore require-await146unitTest("hasAdaptiveTheme - returns true for deprecated highlight-style", async () => {147const pandoc: FormatPandoc = { "highlight-style": "github" };148assertEquals(hasAdaptiveTheme(pandoc), true);149});150151// deno-lint-ignore require-await152unitTest("hasAdaptiveTheme - uses default theme when nothing set", async () => {153// Default theme is "arrow" which is adaptive154const pandoc: FormatPandoc = {};155assertEquals(hasAdaptiveTheme(pandoc), true);156});157158159