Skip to content

Commit

Permalink
Fix issue where table field IDs get quoted (#295)
Browse files Browse the repository at this point in the history
Co-authored-by: Zech Andersen <zech.andersen@swisssalary.ch>
  • Loading branch information
zeande and Zech Andersen committed Nov 28, 2023
1 parent 13d822c commit 9488184
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/NAVObject.ts
Expand Up @@ -483,27 +483,43 @@ export class NAVObject {
}

private AddPrefixAndSuffixToFields(objectText: string): string {
if (!/table/.test(this.objectType)) {
return objectText;
}

this.tableFields.forEach(field => {
objectText = objectText.replace(field.fullFieldText, field.fullFieldTextFixed);
})

return objectText;
}
private AddPrefixAndSuffixToPageFields(objectText: string): string {
if (!/page/.test(this.objectType)) {
return objectText;
}

this.pageFields.forEach(field => {
objectText = objectText.replace(field.fullFieldText, field.fullFieldTextFixed);
})

return objectText;
}
private AddPrefixAndSuffixToPageGroups(objectText: string): string {
if (!/page/.test(this.objectType)) {
return objectText;
}

this.pageGroups.forEach(group => {
objectText = objectText.replace(group.fullGroupText, group.fullGroupTextFixed);
})

return objectText;
}
private AddPrefixAndSuffixToReportColumns(objectText: string): string {
if (!/report/.test(this.objectType)) {
return objectText;
}

this.reportColumns.forEach(column => {
objectText = objectText.replace(column.fullColumnText, column.fullColumnTextFixed);
})
Expand Down
22 changes: 22 additions & 0 deletions src/test/suite/NAVObject.PrefexAndSuffix.test.ts
Expand Up @@ -298,6 +298,28 @@ suite("NAVObject ObjectNamePrefix Tests", () => {
assert.strictEqual(navObject.pageFields.find(a => a.name === '2Field')
.fullFieldTextFixed, "field(\"2Field\"; RandomSource)");
});
test("Test - add quotations to table fields", () => {
let testSettings = Settings.GetConfigSettings(null)
testSettings[Settings.ObjectNamePrefix] = 'waldo';

let navTestObject = NAVTestObjectLibrary.getTableWithIntegerPrefixedNames();
let navObject = new NAVObject(navTestObject.ObjectText, testSettings, navTestObject.ObjectFileName)

// Non integer-prefixed actions and fields are not contained in double-quotes
assert.strictEqual(navObject.tableFields.find(a => a.name === 'MyField')
.fullFieldTextFixed, "field(1; MyField; Integer)");

// Integer-prefixed actions and fields are contained in double-quotes
assert.strictEqual(navObject.tableFields.find(a => a.name === '2Field')
.fullFieldTextFixed, "field(2; \"2Field\"; Integer)");

// Field with parenthesis is correctly quoted
assert.strictEqual(navObject.tableFields.find(a => a.name === 'With (Parenthesis)')
.fullFieldTextFixed, "field(3; \"With (Parenthesis)\"; Decimal)");

// Object should be unchanged other than object prefix
assert.strictEqual(navTestObject.ObjectText.replace('FieldsWithIntegers', 'waldoFieldsWithIntegers'), navObject.NAVObjectTextFixed);
});
test("Pageextension - avoid setting double prefixes to actions", () => {
let testSettings = Settings.GetConfigSettings(null)
testSettings[Settings.ObjectNamePrefix] = 'waldo';
Expand Down
32 changes: 32 additions & 0 deletions src/test/suite/NAVTestObjectLibrary.ts
Expand Up @@ -986,6 +986,38 @@ export function getPageWithIntegerPrefixedNames(): NAVTestObject {
return object;
}

export function getTableWithIntegerPrefixedNames(): NAVTestObject {
let object = new NAVTestObject;

object.ObjectFileName = 'FieldsWithIntegers.Page.al'
object.ObjectText = `table 50104 FieldsWithIntegers
{
DataClassification = ToBeClassified;
fields
{
field(1; MyField; Integer)
{
}
field(2; "2Field"; Integer)
{
}
field(3; "With (Parenthesis)"; Decimal)
{
}
}
keys
{
key(PK; MyField)
{
Clustered = true;
}
}
}`
return object;
}

export function getObjectWithBracketsInName(): NAVTestObject {
let object = new NAVTestObject;

Expand Down

0 comments on commit 9488184

Please sign in to comment.