From 9db138b5266a0776394df028b662b61c269b9b24 Mon Sep 17 00:00:00 2001 From: Mr-Kanister <68117355+Mr-Kanister@users.noreply.github.com> Date: Sun, 24 Nov 2024 21:31:34 +0100 Subject: [PATCH] Fix asDataString not aligning with interface --- src/adap-b04/names/AbstractName.ts | 14 ++++--- src/adap-b04/names/utils.ts | 6 +-- test/adap-b04/names/StringArrayName.test.ts | 41 +++++---------------- test/adap-b04/names/StringName.test.ts | 22 +++++------ 4 files changed, 33 insertions(+), 50 deletions(-) diff --git a/src/adap-b04/names/AbstractName.ts b/src/adap-b04/names/AbstractName.ts index 76bb73a8..a552dfbd 100644 --- a/src/adap-b04/names/AbstractName.ts +++ b/src/adap-b04/names/AbstractName.ts @@ -1,5 +1,5 @@ import { DEFAULT_DELIMITER } from "../common/Printable"; -import { unescape, escape, checkEscaped } from "./utils"; +import { unescape, escape, checkEscaped, joinUnescapedComponents } from "./utils"; import { Name } from "./Name"; import { InvalidStateException } from "../common/InvalidStateException"; import { MethodFailureException } from "../common/MethodFailureException"; @@ -81,7 +81,11 @@ export abstract class AbstractName implements Name { public toString(): string { AbstractName.assertInstanceIsAbstractName(this); - const res = this.asDataString(); + const escapedComponents = []; + for (let i = 0; i < this.getNoComponents(); i++) { + escapedComponents.push(this.getComponent(i)); + } + const res = escapedComponents.join(this.delimiter); // postcondition MethodFailureException.assertIsNotNullOrUndefined(res); @@ -92,11 +96,11 @@ export abstract class AbstractName implements Name { public asDataString(): string { AbstractName.assertInstanceIsAbstractName(this); - const escapedComponents = []; + const unescapedComponents = []; for (let i = 0; i < this.getNoComponents(); i++) { - escapedComponents.push(this.getComponent(i)); + unescapedComponents.push(unescape(this.getComponent(i), this.delimiter)); } - const res = escapedComponents.join(this.delimiter); + const res = joinUnescapedComponents(unescapedComponents, DEFAULT_DELIMITER); // postcondition MethodFailureException.assertIsNotNullOrUndefined(res); diff --git a/src/adap-b04/names/utils.ts b/src/adap-b04/names/utils.ts index 0e48b454..47163189 100644 --- a/src/adap-b04/names/utils.ts +++ b/src/adap-b04/names/utils.ts @@ -15,9 +15,9 @@ export function splitString(str: string, delim: string) { return str.split(regex); } -// export function joinUnescapedComponents(components: string[], delim: string) { -// return components.map(c => escape(c, delim)).join(delim); -// } +export function joinUnescapedComponents(components: string[], delim: string) { + return components.map(c => escape(c, delim)).join(delim); +} export function checkEscaped(str: string, delim: string) { let nextCharEscaped = false; diff --git a/test/adap-b04/names/StringArrayName.test.ts b/test/adap-b04/names/StringArrayName.test.ts index 99df6642..8590e557 100644 --- a/test/adap-b04/names/StringArrayName.test.ts +++ b/test/adap-b04/names/StringArrayName.test.ts @@ -6,23 +6,6 @@ import { AbstractName } from "../../../src/adap-b04/names/AbstractName"; import { IllegalArgumentException } from "../../../src/adap-b04/common/IllegalArgumentException"; import { InvalidStateException } from "../../../src/adap-b04/common/InvalidStateException"; -function assertAllInvalidState(n: AbstractName) { - expect(() => n.clone()).toThrowError(InvalidStateException); - expect(() => n.asString()).toThrowError(InvalidStateException); - expect(() => n.asDataString()).toThrowError(InvalidStateException); - expect(() => n.getDelimiterCharacter()).toThrowError(InvalidStateException); - expect(() => n.isEqual(new StringArrayName([""]))).toThrowError(InvalidStateException); - expect(() => n.getHashCode()).toThrowError(InvalidStateException); - expect(() => n.isEmpty()).toThrowError(InvalidStateException); - expect(() => n.getNoComponents()).toThrowError(InvalidStateException); - expect(() => n.getComponent(0)).toThrowError(InvalidStateException); - expect(() => n.setComponent(0, "s")).toThrowError(InvalidStateException); - expect(() => n.insert(0, "s")).toThrowError(InvalidStateException); - expect(() => n.append("s")).toThrowError(InvalidStateException); - expect(() => n.remove(0)).toThrowError(InvalidStateException); - expect(() => n.concat(new StringArrayName([""]))).toThrowError(InvalidStateException); -} - describe("StringArrayName Tests", () => { it("test invalid construction", () => { // https://www.studon.fau.de/frm4447999_385940.html @@ -108,9 +91,7 @@ describe("StringArrayName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringArrayName(["oss", "cs", "fau", "de"], "_"); - expect(n.asDataString()).toBe("oss_cs_fau_de"); - n2 = new StringName(n.asDataString(), "_"); - expect(n.getNoComponents()).toBe(n2.getNoComponents()); + expect(n.asDataString()).toBe("oss.cs.fau.de"); n = new StringArrayName(["oss\\.cs", "fau\\.de"]); expect(n.asDataString()).toBe("oss\\.cs.fau\\.de"); @@ -119,7 +100,7 @@ describe("StringArrayName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringArrayName(["oss.cs", "fau.de"], "@"); - expect(n.asDataString()).toBe("oss.cs@fau.de"); + expect(n.asDataString()).toBe("oss\\.cs.fau\\.de"); n = new StringArrayName(["", "", ""]); expect(n.asDataString()).toBe(".."); @@ -128,11 +109,11 @@ describe("StringArrayName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringArrayName(["oss.cs.fau.de"], "#"); - expect(n.asDataString()).toBe("oss.cs.fau.de"); + expect(n.asDataString()).toBe("oss\\.cs\\.fau\\.de"); expect(n.getNoComponents()).toBe(1); n = new StringArrayName(["m.y", "n\\,a\\\\m.e"], ","); - expect(n.asDataString()).toBe("m.y,n\\,a\\\\m.e"); + expect(n.asDataString()).toBe("m\\.y.n,a\\\\m\\.e"); }); it("test asDataString()", () => { @@ -143,9 +124,7 @@ describe("StringArrayName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringArrayName(["oss", "cs", "fau", "de"], "_"); - expect(n.asDataString()).toBe("oss_cs_fau_de"); - n2 = new StringName(n.asDataString(), "_"); - expect(n.getNoComponents()).toBe(n2.getNoComponents()); + expect(n.asDataString()).toBe("oss.cs.fau.de"); n = new StringArrayName(["oss\\.cs", "fau\\.de"]); expect(n.asDataString()).toBe("oss\\.cs.fau\\.de"); @@ -154,7 +133,7 @@ describe("StringArrayName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringArrayName(["oss.cs", "fau.de"], "@"); - expect(n.asDataString()).toBe("oss.cs@fau.de"); + expect(n.asDataString()).toBe("oss\\.cs.fau\\.de"); n = new StringArrayName(["", "", ""]); expect(n.asDataString()).toBe(".."); @@ -163,11 +142,11 @@ describe("StringArrayName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringArrayName(["oss.cs.fau.de"], "#"); - expect(n.asDataString()).toBe("oss.cs.fau.de"); + expect(n.asDataString()).toBe("oss\\.cs\\.fau\\.de"); expect(n.getNoComponents()).toBe(1); n = new StringArrayName(["m.y", "n\\,a\\\\m.e"], ","); - expect(n.asDataString()).toBe("m.y,n\\,a\\\\m.e"); + expect(n.asDataString()).toBe("m\\.y.n,a\\\\m\\.e"); }); it("test isEmpty()", () => { @@ -332,7 +311,7 @@ describe("StringArrayName Tests", () => { n = new StringArrayName(["oss\\@cs"], "@"); n.concat(new StringArrayName(["fau@de"])); - expect(n.asDataString()).toBe("oss\\@cs@fau\\@de"); + expect(n.asDataString()).toBe("oss@cs.fau@de"); n = new StringArrayName(["oss\\.tf", "cs"]); n.concat(new StringArrayName(["fau", "de"])); @@ -344,7 +323,7 @@ describe("StringArrayName Tests", () => { n = new StringArrayName(["oss", "cs"], "/"); n.concat(new StringArrayName(["fau\\/", "de"], "/")); - expect(n.asDataString()).toBe("oss/cs/fau\\//de"); + expect(n.asDataString()).toBe("oss.cs.fau/.de"); }); it("test getHashCode()", () => { diff --git a/test/adap-b04/names/StringName.test.ts b/test/adap-b04/names/StringName.test.ts index 4788d1d1..3673a4d4 100644 --- a/test/adap-b04/names/StringName.test.ts +++ b/test/adap-b04/names/StringName.test.ts @@ -96,7 +96,7 @@ describe("StringName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringName("oss_cs_fau_de", "_"); - expect(n.asDataString()).toBe("oss_cs_fau_de"); + expect(n.asDataString()).toBe("oss.cs.fau.de"); n = new StringName("oss\\.cs.fau\\.de"); n2 = new StringName(n.asDataString()); @@ -105,7 +105,7 @@ describe("StringName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringName("oss.cs@fau.de", "@"); - expect(n.asDataString()).toBe("oss.cs@fau.de"); + expect(n.asDataString()).toBe("oss\\.cs.fau\\.de"); n = new StringName(".."); expect(n.asDataString()).toBe(".."); @@ -115,7 +115,7 @@ describe("StringName Tests", () => { n = new StringName("oss.cs.fau.de", "#"); n2 = new StringName(n.asDataString(), "#"); - expect(n.asDataString()).toBe("oss.cs.fau.de"); + expect(n.asDataString()).toBe("oss\\.cs\\.fau\\.de"); // edge case n = new StringName(""); @@ -127,7 +127,7 @@ describe("StringName Tests", () => { expect(n2.getNoComponents()).toBe(1); n = new StringName("m.y,n\\,a\\\\m.e", ","); - expect(n.asDataString()).toBe("m.y,n\\,a\\\\m.e"); + expect(n.asDataString()).toBe("m\\.y.n,a\\\\m\\.e"); }); it("test asDataString()", () => { @@ -138,7 +138,7 @@ describe("StringName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringName("oss_cs_fau_de", "_"); - expect(n.asDataString()).toBe("oss_cs_fau_de"); + expect(n.asDataString()).toBe("oss.cs.fau.de"); n = new StringName("oss\\.cs.fau\\.de"); n2 = new StringName(n.asDataString()); @@ -147,7 +147,7 @@ describe("StringName Tests", () => { expect(n.getNoComponents()).toBe(n2.getNoComponents()); n = new StringName("oss.cs@fau.de", "@"); - expect(n.asDataString()).toBe("oss.cs@fau.de"); + expect(n.asDataString()).toBe("oss\\.cs.fau\\.de"); n = new StringName(".."); expect(n.asDataString()).toBe(".."); @@ -157,7 +157,7 @@ describe("StringName Tests", () => { n = new StringName("oss.cs.fau.de", "#"); n2 = new StringName(n.asDataString(), "#"); - expect(n.asDataString()).toBe("oss.cs.fau.de"); + expect(n.asDataString()).toBe("oss\\.cs\\.fau\\.de"); // edge case n = new StringName(""); @@ -169,7 +169,7 @@ describe("StringName Tests", () => { expect(n2.getNoComponents()).toBe(1); n = new StringName("m.y,n\\,a\\\\m.e", ","); - expect(n.asDataString()).toBe("m.y,n\\,a\\\\m.e"); + expect(n.asDataString()).toBe("m\\.y.n,a\\\\m\\.e"); }); it("test isEmpty()", () => { @@ -350,11 +350,11 @@ describe("StringName Tests", () => { n = new StringName("oss@cs", "@"); n.concat(new StringName("fau.de")); - expect(n.asDataString()).toBe("oss@cs@fau@de"); + expect(n.asDataString()).toBe("oss.cs.fau.de"); n = new StringName("oss\\@cs", "@"); n.concat(new StringName("fau@de")) - expect(n.asDataString()).toBe("oss\\@cs@fau\\@de"); + expect(n.asDataString()).toBe("oss@cs.fau@de"); n = new StringName("oss\\.tf.cs"); n.concat(new StringName("fau.de")); @@ -366,7 +366,7 @@ describe("StringName Tests", () => { n = new StringName("oss/cs", "/"); n.concat(new StringName("fau\\/de", "/")); - expect(n.asDataString()).toBe("oss/cs/fau\\/de"); + expect(n.asDataString()).toBe("oss.cs.fau/de"); }); it("test getHashCode()", () => {