Skip to content

Commit 86a83df

Browse files
committed
test(LanguageChart): add massive scaling coverage
1 parent 13308ff commit 86a83df

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { render, screen } from '@testing-library/react';
2+
import { describe, expect, it, vi } from 'vitest';
3+
4+
import LanguageChart, { buildGradientStops } from './LanguageChart';
5+
6+
class MockIntersectionObserver implements IntersectionObserver {
7+
readonly root: Element | Document | null = null;
8+
readonly rootMargin: string = '';
9+
readonly thresholds: ReadonlyArray<number> = [];
10+
11+
disconnect = vi.fn();
12+
observe = vi.fn();
13+
takeRecords = vi.fn(() => []);
14+
unobserve = vi.fn();
15+
}
16+
17+
global.IntersectionObserver = MockIntersectionObserver;
18+
19+
const massiveLanguages = Array.from({ length: 1000 }, (_, index) => ({
20+
name: `Language-${index}`,
21+
percentage: Number((100 / 1000).toFixed(2)),
22+
color: `#${(index + 100000).toString(16).slice(0, 6)}`,
23+
}));
24+
25+
describe('LanguageChart massive scaling', () => {
26+
it('renders without crashing for massive language dataset', () => {
27+
render(<LanguageChart languages={massiveLanguages} />);
28+
29+
expect(screen.getByText('Top Languages')).toBeInTheDocument();
30+
expect(screen.getAllByText('Language-0').length).toBeGreaterThan(0);
31+
});
32+
33+
it('renders high-volume language labels safely', () => {
34+
render(<LanguageChart languages={massiveLanguages} />);
35+
36+
expect(screen.getByText('Language-10')).toBeInTheDocument();
37+
expect(screen.getByText('Language-999')).toBeInTheDocument();
38+
});
39+
40+
it('handles extremely large percentage values without runtime failure', () => {
41+
const highMetricLanguages = [
42+
{ name: 'TypeScript', percentage: 999999, color: '#3178c6' },
43+
{ name: 'JavaScript', percentage: 888888, color: '#f7df1e' },
44+
{ name: 'Python', percentage: 777777, color: '#3572A5' },
45+
];
46+
47+
render(<LanguageChart languages={highMetricLanguages} />);
48+
49+
expect(screen.getAllByText('TypeScript').length).toBeGreaterThan(0);
50+
expect(screen.getAllByText('999999%').length).toBeGreaterThan(0);
51+
});
52+
53+
it('keeps gradient stop generation stable for massive data', () => {
54+
const gradientStops = buildGradientStops(massiveLanguages);
55+
56+
expect(gradientStops).toContain('#');
57+
expect(gradientStops.length).toBeGreaterThan(1000);
58+
});
59+
60+
it('renders massive dataset within acceptable performance limits', () => {
61+
const start = performance.now();
62+
63+
render(<LanguageChart languages={massiveLanguages} />);
64+
65+
const end = performance.now();
66+
67+
expect(end - start).toBeLessThan(500);
68+
});
69+
});

0 commit comments

Comments
 (0)