import { describe, expect, it } from "vitest";
import { transform } from "../../../../test/helpers/babelTransform.js";
describe("imports visitor - import tracking and injection", () => {
it("should not add StyleSheet import to files without className usage", () => {
const input = `
import { View, Text } from 'react-native';
function MyComponent() {
return Hello;
}
`;
const output = transform(input, undefined, true);
// Should not mutate the import by adding StyleSheet
// Count occurrences of "StyleSheet" in output
const styleSheetCount = (output.match(/StyleSheet/g) ?? []).length;
expect(styleSheetCount).toBe(0);
// Should not have _twStyles definition
expect(output).not.toContain("_twStyles");
expect(output).not.toContain("StyleSheet.create");
// Original imports should remain unchanged
expect(output).toContain("View");
expect(output).toContain("Text");
});
it("should add StyleSheet import only when className is used", () => {
const input = `
import { View } from 'react-native';
function MyComponent() {
return ;
}
`;
const output = transform(input, undefined, true);
// Should have StyleSheet import (both single and double quotes)
expect(output).toMatch(/import.*StyleSheet.*from ['"]react-native['"]|require\(['"]react-native['"]\)/);
// Should have _twStyles definition
expect(output).toContain("_twStyles");
expect(output).toContain("StyleSheet.create");
});
it("should add Platform import only when platform modifiers are used", () => {
const input = `
import { View } from 'react-native';
function MyComponent() {
return ;
}
`;
const output = transform(input, undefined, true);
// Should have Platform import
expect(output).toContain("Platform");
// Should have StyleSheet import too
expect(output).toContain("StyleSheet");
// Should use Platform.select
expect(output).toContain("Platform.select");
});
it("should not add Platform import without platform modifiers", () => {
const input = `
import { View } from 'react-native';
function MyComponent() {
return ;
}
`;
const output = transform(input, undefined, true);
// Should not have Platform import
const platformCount = (output.match(/Platform/g) ?? []).length;
expect(platformCount).toBe(0);
// Should still have StyleSheet
expect(output).toContain("StyleSheet");
});
});