import path from 'path' import { describe, expect, it } from 'vitest' import { relative, wordWrap } from './renderer' import { normalizeWindowsSeperators } from './test-helpers' describe('relative', () => { it('should print an absolute path relative to the current working directory', () => { expect(normalizeWindowsSeperators(relative(path.resolve('index.css')))).toMatchInlineSnapshot( `"./index.css"`, ) }) it('should prefer the shortest value by default', () => { // Shortest between absolute and relative paths expect(normalizeWindowsSeperators(relative('index.css'))).toMatchInlineSnapshot(`"index.css"`) }) it('should be possible to override the current working directory', () => { expect(normalizeWindowsSeperators(relative('../utils/index.css', '..'))).toMatchInlineSnapshot( `"./utils/index.css"`, ) }) it('should be possible to always prefer the relative path', () => { expect( normalizeWindowsSeperators( relative('index.css', process.cwd(), { preferAbsoluteIfShorter: false }), ), ).toMatchInlineSnapshot(`"./index.css"`) }) }) describe('word wrap', () => { it('should wrap a sentence', () => { expect(wordWrap('The quick brown fox jumps over the lazy dog', 10)).toMatchInlineSnapshot(` [ "The quick", "brown fox", "jumps over", "the lazy", "dog", ] `) expect(wordWrap('The quick brown fox jumps over the lazy dog', 30)).toMatchInlineSnapshot(` [ "The quick brown fox jumps over", "the lazy dog", ] `) }) it('should wrap a sentence with ANSI escape codes', () => { // The ANSI escape codes are not counted in the length, but they should // still be rendered correctly. expect( wordWrap( '\x1B[31mThe\x1B[39m \x1B[32mquick\x1B[39m \x1B[34mbrown\x1B[39m \x1B[35mfox\x1B[39m jumps over the lazy dog', 10, ), ).toMatchInlineSnapshot(` [ "The quick", "brown fox", "jumps over", "the lazy", "dog", ] `) }) })