@aire-ux/aire-condensation
Version:
Client-side serialization library for Aire-UX
97 lines (81 loc) • 2.31 kB
text/typescript
import { Condensation, Context } from "@condensation/condensation";
import { Property, RootElement } from "@condensation/root-element";
import { Receive, Remotable } from "@condensation/remotable";
import { allocate, Region } from "@condensation/types";
let context: Context;
beforeEach(() => {
context = Condensation.newContext();
});
test("moving an object to a different context should result in the object being available in the target and unavailable in the source", () => {
class Type {}
const source = new Region(),
target = new Region();
const type = allocate<Type>(Type, source);
expect(source.addressOf(type)).toBeDefined();
source.move(type, target);
expect(source.addressOf(type).value).toEqual(-1);
expect(target.addressOf(type)).toBeDefined();
});
test("objects should be allocatable in a context", () => {
class Person {
(String)
firstName: string | undefined;
}
class RemotePerson {
firstName: string | undefined;
constructor((Person) readonly person: Person) {
this.firstName = person.firstName;
}
public setFirstNameFrom((Person) person: Person): void {
this.firstName = person.firstName;
}
}
const value = context.create<RemotePerson>(
RemotePerson,
`{
"firstName": "Josiah"
}`
);
expect(value.firstName).toBe("Josiah");
});
test("objects should be invocable by their handles", () => {
class Person {
(String)
firstName: string | undefined;
}
class RemotePerson {
firstName: string | undefined;
constructor((Person) readonly person: Person) {
this.firstName = person.firstName;
}
public setFirstNameFrom(
(Person) person: Person
): string | undefined {
this.firstName = person.firstName;
return this.firstName;
}
}
const value = context.create<RemotePerson>(
RemotePerson,
`{
"firstName": "Josiah"
}`
);
expect(value.firstName).toBe("Josiah");
const result = context.invoke(
value.address,
"setFirstNameFrom",
`{
"firstName": "Lisa"
}`
);
expect(result).toBe("Lisa");
expect((context.locate(value.address) as RemotePerson).firstName).toBe(
"Lisa"
);
});