33 lines
1.6 KiB
TypeScript
33 lines
1.6 KiB
TypeScript
import {fireEvent,render,screen,within} from '@testing-library/react';
|
|
import {buildProjectTree,ProjectTree} from './ProjectTree';
|
|
|
|
const files=[
|
|
{path:'robot/meshes/arm.obj',size:2048},
|
|
{path:'robot/model.xml',size:512},
|
|
{path:'robot/textures/body.png',size:4096},
|
|
{path:'README.txt',size:10},
|
|
];
|
|
|
|
describe('ProjectTree',()=>{
|
|
it('按路径构建多级目录,并将目录排在文件前面',()=>{
|
|
const tree=buildProjectTree(files);
|
|
expect(tree.map(node=>[node.kind,node.name])).toEqual([['directory','robot'],['file','README.txt']]);
|
|
const robot=tree[0];
|
|
expect(robot.children?.map(node=>[node.kind,node.name])).toEqual([
|
|
['directory','meshes'],['directory','textures'],['file','model.xml'],
|
|
]);
|
|
expect(robot.children?.[0].children?.[0]).toMatchObject({kind:'file',name:'arm.obj',path:'robot/meshes/arm.obj'});
|
|
});
|
|
|
|
it('以可折叠目录显示文件名,而不是平铺完整路径',()=>{
|
|
render(<ProjectTree files={files} entries={[{path:'robot/model.xml',format:'urdf',label:'model'}]} selectedEntry="robot/model.xml"/>);
|
|
const tree=screen.getByRole('navigation',{name:'工程文件树'}),robot=within(tree).getByText('robot'),meshes=within(tree).getByText('meshes');
|
|
expect(robot.closest('details')).toHaveAttribute('open');
|
|
expect(meshes.closest('details')).not.toHaveAttribute('open');
|
|
fireEvent.click(meshes);
|
|
expect(within(tree).getByText('arm.obj')).toBeVisible();
|
|
expect(within(tree).queryByText('robot/meshes/arm.obj')).not.toBeInTheDocument();
|
|
expect(within(tree).getByText('urdf')).toBeVisible();
|
|
});
|
|
});
|