You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/__test__/FileSystem/file.test.ts

191 lines
4.9 KiB

import * as THREE from 'three';
import { AllObjectData } from '../../src/DatabaseServices/AllObjectData';
import { BlockTableRecord } from '../../src/DatabaseServices/BlockTableRecord';
import { CADFactory } from '../../src/DatabaseServices/CADFactory';
import { CADFiler } from '../../src/DatabaseServices/CADFiler';
import { CADObject } from '../../src/DatabaseServices/CADObject';
import { CommandHistoryRecord } from '../../src/DatabaseServices/CommandHistoryRecord';
import { CreateObjectData } from '../../src/DatabaseServices/CreateObjectData';
import { Database } from '../../src/DatabaseServices/Database';
import { Entity } from '../../src/DatabaseServices/Entity';
import { HistorycRecord } from '../../src/DatabaseServices/HistorycRecord';
import { Line } from '../../src/DatabaseServices/Line';
import { ObjectAllDataHistoryRecord } from '../../src/DatabaseServices/ObjectAllDataHistoryRecord';
import { RemoveObjectData } from '../../src/DatabaseServices/RemoveObjectData';
function CadObjectToString(obj: CADObject)
{
let file = new CADFiler();
file.WriteObject(obj)
return file.ToString();
}
test('测试创建', () =>
{
for (let C of [AllObjectData,
BlockTableRecord,
CommandHistoryRecord,
CreateObjectData,
HistorycRecord,
Line,
ObjectAllDataHistoryRecord,
RemoveObjectData,
])
{
console.log(C);
//确保每个对象都被正确的创建
let obj = CADFactory.CreateObject(C.name /*?*/);
let str = CadObjectToString(obj);
console.log(obj.constructor.name);
expect(str).toMatchSnapshot();
//确保对象正确的反序列化
let fileNew = new CADFiler();
fileNew.Data = JSON.parse(str);
let objNew = CADFactory.CreateObject(C.name);
let str2 = CadObjectToString(objNew);
//确保反序列化之后的数据是正确的
expect(str).toBe(str2);
}
});
test('id分配', () =>
{
let db = new Database();
let line = new Line();
//对象添加到模型空间 分配id
db.ModelSpace.Append(line);
let id = line.Id;
expect(id != undefined).toBeTruthy();//对象已经被创建,所以id被分配
expect(id.Object === line).toBeTruthy();//对象id指向对象
//撤销添加
db.hm.Undo();
expect(id.IsErase).toBeTruthy(); //对象已经被删除
expect(db.ModelSpace.Entitys.length).toBe(0); //个数应该为0
//还原对象
db.hm.Redo();
expect(db.ModelSpace.Entitys.length).toBe(1); //对象还原
expect(!id.IsErase).toBeTruthy(); //id指向的对象不被删除
});
test('clone object', () =>
{
let db = new Database();
let line = new Line();
db.ModelSpace.Append(line);
line.StartPoint = new THREE.Vector3(9, 9, 8);
CadObjectToString(line)/*?*/
let line2 = line.Clone();
CadObjectToString(line2) /*?*/
});
test('changev', () =>
{
let db = new Database();
let l1 = new Line();
db.ModelSpace.Append(l1);
let id = l1.Id;
db.hm.Undo();
db.hm.Redo();
expect(id.Object !== l1).toBeTruthy(); //创建对象的撤销和重做后 id指向了新的实体
(id.Object as Line).StartPoint = new THREE.Vector3(2, 3, 4);
let file = db.FileWrite();
expect(file.ToString()/*?*/).toMatchSnapshot();
});
test('xxx', () =>
{
let db = new Database();
db.hm.StartCmd("");
let l1 = new Line();
let l2 = new Line();
db.ModelSpace.Append(l1);
let id1 = l1.Id;
db.ModelSpace.Append(l2);
db.hm.Undo(); //?
db.hm.Redo(); //?
db.hm.StartCmd("");
db.ModelSpace.Remove(db.GetObjectId(1).Object as Entity);
db.hm.Undo(); //?
db.hm.Undo(); //?
db.hm.Redo(); //?
// db.hm.StartCmd("");
(id1.Object as Line).StartPoint = new THREE.Vector3(10, 4, 2);
(id1.Object as Line).EndPoint = new THREE.Vector3(2, 2, 2);
let file = db.FileWrite();
console.log(file.ToString());
db.hm.StartCmd("");
(id1.Object as Line).StartPoint = new THREE.Vector3(100, 300, 400);
(id1.Object as Line).EndPoint = new THREE.Vector3(2000, 3000, 4000);
db.hm.Undo();
db.hm.Redo();
let f = new CADFiler();
db.hm.WriteFile(f);
let db2 = new Database();
f.database = db2;
db2.hm.ReadFile(f);
let f3 = new CADFiler();
f3.database = db2;
db2.hm.WriteFile(f3);
expect(f3.ToString()).toBe(f.ToString());//对象序列化反序列化后 数据应该一样
});
test('创建 修改 撤销撤销 重做重做 撤销 重做', () =>
{
let db = new Database();
let line = new Line();
db.ModelSpace.Append(line);
db.hm.StartCmd("U");
line.StartPoint = new THREE.Vector3(1, 2, 3);
db.hm.EndCmd();
db.hm.Undo(); /*?*/
db.hm.Undo();/*?*/
db.hm.Redo();/*?*/
db.hm.Redo();/*?*/
db.hm.Undo();/*?*/
db.hm.Redo();/*?*/
expect(db.FileWrite().ToString()).toMatchSnapshot();
expect(CadObjectToString(db.hm)).toMatchSnapshot();
});