From 3d9ff9fd990f1ec0dd9618b6d3b135ccdb00a9ba Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Tue, 6 Feb 2024 09:12:03 +0100 Subject: [PATCH] fix(parser-adapter-yaml-1-2): fix canonical formatting of quoted scalars (#3792) Refs #3788 --- .../src/yaml/schemas/canonical-format.ts | 4 +-- .../__snapshots__/index.ts.snap | 4 +-- .../test/adapter-browser.ts | 29 ++++++++++++++++++- .../test/adapter-node/index.ts | 29 ++++++++++++++++++- .../indirect/visitors/CstVisitor.ts | 14 --------- 5 files changed, 60 insertions(+), 20 deletions(-) delete mode 100644 packages/apidom-parser-adapter-yaml-1-2/test/syntactic-analysis/indirect/visitors/CstVisitor.ts diff --git a/packages/apidom-ast/src/yaml/schemas/canonical-format.ts b/packages/apidom-ast/src/yaml/schemas/canonical-format.ts index 9e84a9d3c..14d828821 100644 --- a/packages/apidom-ast/src/yaml/schemas/canonical-format.ts +++ b/packages/apidom-ast/src/yaml/schemas/canonical-format.ts @@ -128,11 +128,11 @@ export const formatFlowPlain = pipe( export const formatFlowSingleQuoted = pipe( normalizeLineBreaks, trim, - removeQuotes("'"), collapseLineBreakToSpace, split('\n'), map(trimStart), join('\n'), + removeQuotes("'"), ); /** @@ -142,13 +142,13 @@ export const formatFlowSingleQuoted = pipe( export const formatFlowDoubleQuoted = pipe( normalizeLineBreaks, trim, - removeQuotes('"'), preventLineBreakCollapseToSpace, collapseLineBreakToSpace, unraw, split('\n'), map(trimStart), join('\n'), + removeQuotes('"'), ); /** diff --git a/packages/apidom-ns-openapi-3-1/test/refractor/plugins/normalize-operation-ids/__snapshots__/index.ts.snap b/packages/apidom-ns-openapi-3-1/test/refractor/plugins/normalize-operation-ids/__snapshots__/index.ts.snap index 2502b971e..bdcb0eb6d 100644 --- a/packages/apidom-ns-openapi-3-1/test/refractor/plugins/normalize-operation-ids/__snapshots__/index.ts.snap +++ b/packages/apidom-ns-openapi-3-1/test/refractor/plugins/normalize-operation-ids/__snapshots__/index.ts.snap @@ -531,7 +531,7 @@ exports[`refractor plugins normalize-operation-ids given Operation Object with o }, "originalOperationId": { "element": "string", - "content": "" + "content": " " } }, "content": [ @@ -568,7 +568,7 @@ exports[`refractor plugins normalize-operation-ids given Operation Object with o }, "value": { "element": "string", - "content": "" + "content": " " } } } diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-browser.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-browser.ts index 24b4b3636..ba4eae6c0 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-browser.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-browser.ts @@ -1,7 +1,13 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert, expect } from 'chai'; -import { toValue, isObjectElement, isParseResultElement, sexprs } from '@swagger-api/apidom-core'; +import { + toValue, + isObjectElement, + isParseResultElement, + sexprs, + isStringElement, +} from '@swagger-api/apidom-core'; import * as adapter from '../src/adapter-browser'; @@ -126,4 +132,25 @@ describe('adapter-browser', function () { assert.strictEqual(toValue(parseResult.errors.get(0)), '(Error YAML syntax error)'); }); }); + + context('given an alias', function () { + specify('should analyze alias as string', async function () { + const result = await adapter.parse('*alias'); + assert.isTrue(isStringElement(result.result)); + }); + }); + + context('given single-quote scalar containing only space characters', function () { + specify('should parse all space characters', async function () { + const result = await adapter.parse("' '"); + assert.strictEqual(result.toValue()[0], ' '); + }); + }); + + context('given double-quote scalar containing only space characters', function () { + specify('should parse all space characters', async function () { + const result = await adapter.parse('" "'); + assert.strictEqual(result.toValue()[0], ' '); + }); + }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/index.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/index.ts index bac4c4751..1f35dd5aa 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/index.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/index.ts @@ -2,7 +2,13 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert, expect } from 'chai'; import { YamlTagError } from '@swagger-api/apidom-ast'; -import { toValue, isObjectElement, isParseResultElement, sexprs } from '@swagger-api/apidom-core'; +import { + toValue, + isObjectElement, + isParseResultElement, + sexprs, + isStringElement, +} from '@swagger-api/apidom-core'; import * as adapter from '../../src/adapter-node'; @@ -155,4 +161,25 @@ describe('adapter-node', function () { } }); }); + + context('given an alias', function () { + specify('should analyze alias as string', async function () { + const result = await adapter.parse('*alias'); + assert.isTrue(isStringElement(result.result)); + }); + }); + + context('given single-quote scalar containing only space characters', function () { + specify('should parse all space characters', async function () { + const result = await adapter.parse("' '"); + assert.strictEqual(result.toValue()[0], ' '); + }); + }); + + context('given double-quote scalar containing only space characters', function () { + specify('should parse all space characters', async function () { + const result = await adapter.parse('" "'); + assert.strictEqual(result.toValue()[0], ' '); + }); + }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/syntactic-analysis/indirect/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-yaml-1-2/test/syntactic-analysis/indirect/visitors/CstVisitor.ts deleted file mode 100644 index 3556c9a8d..000000000 --- a/packages/apidom-parser-adapter-yaml-1-2/test/syntactic-analysis/indirect/visitors/CstVisitor.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { assert } from 'chai'; -import { isStringElement } from '@swagger-api/apidom-core'; - -import { parse } from '../../../../src/adapter-node'; - -describe('syntactic-analysis', function () { - context('CstVisitor', function () { - specify('should analyze alias as string', async function () { - const result = await parse('*alias'); - - assert.isTrue(isStringElement(result.result)); - }); - }); -});