Skip to content

Commit

Permalink
Fix asDataString not aligning with interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Mr-Kanister committed Nov 24, 2024
1 parent fdeb63d commit 9db138b
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 50 deletions.
14 changes: 9 additions & 5 deletions src/adap-b04/names/AbstractName.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down
6 changes: 3 additions & 3 deletions src/adap-b04/names/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
41 changes: 10 additions & 31 deletions test/adap-b04/names/StringArrayName.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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");
Expand All @@ -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("..");
Expand All @@ -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()", () => {
Expand All @@ -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");
Expand All @@ -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("..");
Expand All @@ -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()", () => {
Expand Down Expand Up @@ -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"]));
Expand All @@ -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()", () => {
Expand Down
22 changes: 11 additions & 11 deletions test/adap-b04/names/StringName.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand All @@ -105,7 +105,7 @@ describe("StringName Tests", () => {
expect(n.getNoComponents()).toBe(n2.getNoComponents());

n = new StringName("[email protected]", "@");
expect(n.asDataString()).toBe("oss.cs@fau.de");
expect(n.asDataString()).toBe("oss\\.cs.fau\\.de");

n = new StringName("..");
expect(n.asDataString()).toBe("..");
Expand All @@ -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("");
Expand All @@ -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()", () => {
Expand All @@ -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());
Expand All @@ -147,7 +147,7 @@ describe("StringName Tests", () => {
expect(n.getNoComponents()).toBe(n2.getNoComponents());

n = new StringName("[email protected]", "@");
expect(n.asDataString()).toBe("oss.cs@fau.de");
expect(n.asDataString()).toBe("oss\\.cs.fau\\.de");

n = new StringName("..");
expect(n.asDataString()).toBe("..");
Expand All @@ -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("");
Expand All @@ -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()", () => {
Expand Down Expand Up @@ -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"));
Expand All @@ -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()", () => {
Expand Down

0 comments on commit 9db138b

Please sign in to comment.