File size: 3,586 Bytes
7a1ad33 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | /**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { describe, it, expect } from 'vitest';
import { isBuildFile } from './buildFileUtils.js';
describe('buildFileUtils', () => {
describe('isBuildFile', () => {
it('should identify Bazel and Blaze build files', () => {
expect(isBuildFile('BUILD')).toBe(true);
expect(isBuildFile('foo/bar/BUILD')).toBe(true);
expect(isBuildFile('BUILD.bazel')).toBe(true);
expect(isBuildFile('path/to/BUILD.bazel')).toBe(true);
expect(isBuildFile('WORKSPACE')).toBe(true);
expect(isBuildFile('WORKSPACE.bazel')).toBe(true);
expect(isBuildFile('MODULE.bazel')).toBe(true);
expect(isBuildFile('.bazelrc')).toBe(true);
expect(isBuildFile('.blazerc')).toBe(true);
expect(isBuildFile('defs.bzl')).toBe(true);
expect(isBuildFile('rules/custom.bzl')).toBe(true);
expect(isBuildFile('deps.bazel')).toBe(true);
expect(isBuildFile('ext.bzlmod')).toBe(true);
});
it('should identify Make and CMake files', () => {
expect(isBuildFile('Makefile')).toBe(true);
expect(isBuildFile('makefile')).toBe(true);
expect(isBuildFile('GNUmakefile')).toBe(true);
expect(isBuildFile('rules.mk')).toBe(true);
expect(isBuildFile('CMakeLists.txt')).toBe(true);
expect(isBuildFile('cmake/FindFoo.cmake')).toBe(true);
});
it('should identify Node.js build and manifest files', () => {
expect(isBuildFile('package.json')).toBe(true);
expect(isBuildFile('packages/core/package.json')).toBe(true);
expect(isBuildFile('package-lock.json')).toBe(true);
expect(isBuildFile('pnpm-lock.yaml')).toBe(true);
expect(isBuildFile('yarn.lock')).toBe(true);
expect(isBuildFile('bun.lockb')).toBe(true);
});
it('should identify Python, Go, Rust, and Java/Kotlin build files', () => {
expect(isBuildFile('setup.py')).toBe(true);
expect(isBuildFile('setup.cfg')).toBe(true);
expect(isBuildFile('pyproject.toml')).toBe(true);
expect(isBuildFile('go.mod')).toBe(true);
expect(isBuildFile('go.sum')).toBe(true);
expect(isBuildFile('Cargo.toml')).toBe(true);
expect(isBuildFile('Cargo.lock')).toBe(true);
expect(isBuildFile('pom.xml')).toBe(true);
expect(isBuildFile('build.gradle')).toBe(true);
expect(isBuildFile('build.gradle.kts')).toBe(true);
expect(isBuildFile('settings.gradle')).toBe(true);
expect(isBuildFile('settings.gradle.kts')).toBe(true);
});
it('should identify container build files', () => {
expect(isBuildFile('Dockerfile')).toBe(true);
expect(isBuildFile('Dockerfile.dev')).toBe(true);
expect(isBuildFile('Containerfile')).toBe(true);
expect(isBuildFile('Containerfile.prod')).toBe(true);
});
it('should return false for regular source code and non-build files', () => {
expect(isBuildFile('')).toBe(false);
expect(isBuildFile('main.ts')).toBe(false);
expect(isBuildFile('src/index.js')).toBe(false);
expect(isBuildFile('README.md')).toBe(false);
expect(isBuildFile('service.cc')).toBe(false);
expect(isBuildFile('foo/bar/model.py')).toBe(false);
expect(isBuildFile('config.json')).toBe(false);
expect(isBuildFile('settings.toml')).toBe(false);
});
it('should correctly identify build files using Windows backslashes on POSIX environments', () => {
expect(isBuildFile('foo\\bar\\BUILD')).toBe(true);
expect(isBuildFile('path\\to\\package.json')).toBe(true);
});
});
});
|