forked from
npmx.dev/npmx.dev
[READ-ONLY]
a fast, modern browser for the npm registry
1import { describe, expect, it } from 'vitest'
2import { getFileIcon } from '../../../../app/utils/file-icons'
3
4describe('getFileIcon', () => {
5 it('returns correct icons for exact filename matches', () => {
6 expect(getFileIcon('package.json')).toBe('vscode-icons-file-type-npm')
7 expect(getFileIcon('Dockerfile')).toBe('vscode-icons-file-type-docker')
8 expect(getFileIcon('.gitignore')).toBe('vscode-icons-file-type-git')
9 expect(getFileIcon('eslint.config.js')).toBe('vscode-icons-file-type-eslint')
10 expect(getFileIcon('vitest.config.ts')).toBe('vscode-icons-file-type-vitest')
11 expect(getFileIcon('.env')).toBe('vscode-icons-file-type-dotenv')
12 })
13
14 it('returns correct icons for compound extensions', () => {
15 expect(getFileIcon('types.d.ts')).toBe('vscode-icons-file-type-typescriptdef')
16 expect(getFileIcon('utils.test.ts')).toBe('vscode-icons-file-type-testts')
17 expect(getFileIcon('utils.spec.js')).toBe('vscode-icons-file-type-testjs')
18 expect(getFileIcon('Button.stories.tsx')).toBe('vscode-icons-file-type-storybook')
19 })
20
21 it('returns correct icons for simple extensions', () => {
22 expect(getFileIcon('index.js')).toBe('vscode-icons-file-type-js-official')
23 expect(getFileIcon('main.ts')).toBe('vscode-icons-file-type-typescript-official')
24 expect(getFileIcon('App.vue')).toBe('vscode-icons-file-type-vue')
25 expect(getFileIcon('data.json')).toBe('vscode-icons-file-type-json')
26 expect(getFileIcon('build.sh')).toBe('vscode-icons-file-type-shell')
27 expect(getFileIcon('script.py')).toBe('vscode-icons-file-type-python')
28 expect(getFileIcon('lib.rs')).toBe('vscode-icons-file-type-rust')
29 expect(getFileIcon('logo.png')).toBe('vscode-icons-file-type-image')
30 expect(getFileIcon('archive.tar')).toBe('vscode-icons-file-type-zip')
31 })
32
33 it('returns default icon for unknown files', () => {
34 expect(getFileIcon('file.xyz')).toBe('vscode-icons-default-file')
35 expect(getFileIcon('unknownfile')).toBe('vscode-icons-default-file')
36 })
37
38 it('prefers exact filename over extension, and compound over simple', () => {
39 expect(getFileIcon('package.json')).toBe('vscode-icons-file-type-npm')
40 expect(getFileIcon('foo.test.ts')).toBe('vscode-icons-file-type-testts')
41 })
42})