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

183 lines
3.9 KiB

import { Vector3 } from 'three';
import * as THREE from 'three';
import
{
AllObjectData,
BlockTableRecord,
CADFactory,
CADFile,
CADObject,
ColorMaterial,
CommandHistoryRecord,
CreateObjectData,
Database,
HistorycRecord,
Line,
ObjectAllDataHistoryRecord,
RemoveObjectData,
} from '../../src/DatabaseServices/FileSystem';
function CadObjectToString(obj: CADObject)
{
let file = new CADFile();
obj.WriteFile(file);
return file.ToString();
}
test('测试创建', () =>
{
for (let C of [AllObjectData,
BlockTableRecord,
CommandHistoryRecord,
CreateObjectData,
HistorycRecord,
Line,
ObjectAllDataHistoryRecord,
RemoveObjectData,
CADObject])
{
//确保每个对象都被正确的创建
let obj = CADFactory.CreateObject(C.name /*?*/);
let str = CadObjectToString(obj);
expect(str).toMatchSnapshot();
//确保对象正确的反序列化
let fileNew = new CADFile();
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
let id = db.ModelSpace.Append(line);
expect(id != undefined).toBeTruthy();//对象已经被创建,所以id被分配
expect(id.Object === line).toBeTruthy();//对象id指向对象
//撤销添加
db.hm.Undo();
expect(id.IsErase).toBeTruthy(); //对象已经被删除
expect(db.ModelSpace.Cout()).toBe(0); //个数应该为0
//还原对象
db.hm.Redo();
expect(db.ModelSpace.Cout()).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 Vector3(9, 9, 8);
CadObjectToString(line)/*?*/
let line2 = line.Clone();
CadObjectToString(line2) /*?*/
});
test('changev', () =>
{
let db = new Database();
let l1 = new Line();
let id = db.ModelSpace.Append(l1);
db.hm.Undo();
db.hm.Redo();
expect(id.Object !== l1).toBeTruthy(); //创建对象的撤销和重做后 id指向了新的实体
(id.Object as Line).StartPoint = new 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();
let id1 = db.ModelSpace.Append(l1);
let in2 = db.ModelSpace.Append(l2);
db.hm.Undo(); //?
db.hm.Redo(); //?
db.hm.StartCmd("");
db.ModelSpace.Remove(db.GetObjectId(1).Object);
db.hm.Undo(); //?
db.hm.Undo(); //?
db.hm.Redo(); //?
// db.hm.StartCmd("");
(id1.Object as Line).StartPoint = new Vector3(10, 4, 2);
(id1.Object as Line).EndPoint = new Vector3(2, 2, 2);
let file = db.FileWrite();
console.log(file.ToString());
db.hm.StartCmd("");
(id1.Object as Line).StartPoint = new Vector3(100, 300, 400);
(id1.Object as Line).EndPoint = new Vector3(2000, 3000, 4000);
db.hm.Undo();
db.hm.Redo();
let f = new CADFile();
db.hm.WriteFile(f);
let db2 = new Database();
db2.hm.ReadFile(f);
let f3 = new CADFile();
db2.hm.WriteFile(f3);
expect(f3.ToString()).toBe(f.ToString());//对象序列化反序列化后 数据应该一样
});
test('create material', () =>
{
let materialRed = new ColorMaterial();
materialRed.Color = new THREE.Color(321321);
materialRed.ClassName /*?*/
let f = new CADFile();
f.WriteObject(materialRed);
let materialCopy = f.ReadObject(undefined);
f.ToString()/*?*/
CadObjectToString(materialRed) /*?*/
});