dcmjs
Version:
Javascript implementation of DICOM manipulation
206 lines (188 loc) • 7.45 kB
JavaScript
import dcmjs from "../src/index.js";
import dicomJson from "../src/utilities/dicomJson.js";
const { utilities } = dcmjs;
const { addAccessors } = utilities;
describe("dicomJson", () => {
describe("pnAddValueAccessors", () => {
it("recreates json object from string input", () => {
const value = new String("One\\Two");
const accessorValue = dicomJson.pnAddValueAccessors(value);
expect(value).toBe(accessorValue);
expect(JSON.stringify(value)).toEqual(
JSON.stringify([{ Alphabetic: "One" }, { Alphabetic: "Two" }])
);
expect(String(accessorValue)).toEqual("One\\Two");
});
it("recreates dicom string from json object", () => {
const value = [{ Alphabetic: "One" }, { Alphabetic: "Two" }];
const accessorValue = dicomJson.pnAddValueAccessors(value);
expect(value).toBe(accessorValue);
expect(JSON.stringify(value)).toEqual(
JSON.stringify([{ Alphabetic: "One" }, { Alphabetic: "Two" }])
);
expect(String(accessorValue)).toEqual("One\\Two");
});
});
describe("pnObjectToString", () => {
it("accepts undefined and empty", () => {
expect(dicomJson.pnObjectToString(undefined)).toEqual("");
expect(dicomJson.pnObjectToString(null)).toEqual("");
expect(dicomJson.pnObjectToString("")).toEqual("");
});
it("accepts json PNs", () => {
expect(dicomJson.pnObjectToString({ Alphabetic: "One" })).toEqual(
"One"
);
expect(dicomJson.pnObjectToString([{ Alphabetic: "One" }])).toEqual(
"One"
);
expect(
dicomJson.pnObjectToString([
{
Alphabetic: "One",
Ideographic: undefined,
Phonetic: undefined
}
])
).toEqual("One");
expect(
dicomJson.pnObjectToString([
{ Alphabetic: "One", Ideographic: "Two", Phonetic: "Three" }
])
).toEqual("One=Two=Three");
expect(
dicomJson.pnObjectToString([
{ Alphabetic: "One" },
{ Alphabetic: "Two" }
])
).toEqual("One\\Two");
});
it("accepts strings", () => {
expect(dicomJson.pnObjectToString("One")).toEqual("One");
expect(dicomJson.pnObjectToString(String("One"))).toEqual("One");
expect(dicomJson.pnObjectToString("One=Two\\Three\\Four")).toEqual(
"One=Two\\Three\\Four"
);
});
});
describe("pnConvertToJsonObject", () => {
it("accepts undefined", () => {
expect(dicomJson.pnConvertToJsonObject(undefined)).toEqual([]);
expect(dicomJson.pnConvertToJsonObject(undefined, false)).toEqual(
undefined
);
});
it("accepts a single name string", () => {
expect(dicomJson.pnConvertToJsonObject("One")).toEqual([
{ Alphabetic: "One" }
]);
expect(dicomJson.pnConvertToJsonObject("One==")).toEqual([
{ Alphabetic: "One" }
]);
expect(dicomJson.pnConvertToJsonObject("One=Two=")).toEqual([
{ Alphabetic: "One", Ideographic: "Two" }
]);
expect(dicomJson.pnConvertToJsonObject("One==Three")).toEqual([
{ Alphabetic: "One", Phonetic: "Three" }
]);
expect(dicomJson.pnConvertToJsonObject("One=Two=Three")).toEqual([
{ Alphabetic: "One", Ideographic: "Two", Phonetic: "Three" }
]);
expect(
dicomJson.pnConvertToJsonObject("One=Two=Three", false)
).toEqual({
Alphabetic: "One",
Ideographic: "Two",
Phonetic: "Three"
});
// Discard extraneous or empty values
expect(
dicomJson.pnConvertToJsonObject("One=Two=Three\\Four", false)
).toEqual({
Alphabetic: "One",
Ideographic: "Two",
Phonetic: "Three"
});
expect(dicomJson.pnConvertToJsonObject("\\One=Two=Three")).toEqual([
{
Alphabetic: "One",
Ideographic: "Two",
Phonetic: "Three"
}
]);
expect(
dicomJson.pnConvertToJsonObject("\\One=Two=Three", false)
).toEqual({
Alphabetic: "One",
Ideographic: "Two",
Phonetic: "Three"
});
});
it("accepts multiple name string", () => {
expect(
dicomJson.pnConvertToJsonObject("One=Two=Three\\Four=Five=Six")
).toEqual([
{ Alphabetic: "One", Ideographic: "Two", Phonetic: "Three" },
{ Alphabetic: "Four", Ideographic: "Five", Phonetic: "Six" }
]);
});
it("accepts objects", () => {
const jsonObj = {
Alphabetic: "One",
Ideographic: "Two",
Phonetic: "Three"
};
expect(dicomJson.pnConvertToJsonObject(jsonObj)).toEqual([jsonObj]);
expect(dicomJson.pnConvertToJsonObject(jsonObj, false)).toEqual(
jsonObj
);
expect(dicomJson.pnConvertToJsonObject([jsonObj])).toEqual([
jsonObj
]);
expect(dicomJson.pnConvertToJsonObject([jsonObj], false)).toEqual([
jsonObj
]);
});
});
});
describe("addAccessor", () => {
it("testAddAccessor", () => {
const baseValue = { a: 1, b: 2 };
const arrValue = [baseValue];
const val = addAccessors(arrValue);
expect(val.a).toEqual(1);
baseValue.a = 3;
expect(val.a).toEqual(3);
val.b = 4;
expect(baseValue.b).toEqual(4);
// Check that we can iterate as an array
const forArr = [];
val.forEach(item => forArr.push(item));
expect(forArr.length).toEqual(1);
expect(forArr[0]).toEqual(baseValue);
});
it("testAddAccessor-adds_children", () => {
const baseValue = { a: 1, b: 2 };
const arrValue = [baseValue];
const val = addAccessors(arrValue, baseValue);
val.push({ a: "two" });
expect(val.length).toBe(2);
expect(val[1].a).toBe("two");
expect(val.a).toBe(1);
expect(val[0].a).toBe(1);
});
it("Does not double proxy", () => {
const baseValue = { a: 1, b: 2 };
const arrValue = [baseValue];
const val = addAccessors(arrValue, baseValue);
expect(val).toEqual(addAccessors(val));
expect(val.__isProxy).toBe(true);
});
it("Handles non-array dest with no sqzero", () => {
const baseValue = { a: 1, b: 2 };
expect(Array.isArray(addAccessors(baseValue))).toBe(true);
expect(addAccessors("Hello")).toBe("Hello");
expect(addAccessors([baseValue])[0]).toBe(baseValue);
expect(addAccessors([baseValue, 2])[1]).toBe(2);
});
});