diff --git a/packages/quicktype-core/src/ConvenienceRenderer.ts b/packages/quicktype-core/src/ConvenienceRenderer.ts index de5901e6e..af8ff1603 100644 --- a/packages/quicktype-core/src/ConvenienceRenderer.ts +++ b/packages/quicktype-core/src/ConvenienceRenderer.ts @@ -995,10 +995,7 @@ export abstract class ConvenienceRenderer extends Renderer { f: (name: Name, jsonName: string, position: ForEachPosition) => void, ): void { const caseNames = defined(this._caseNamesStoreView).get(e); - const sortedCaseNames = mapSortBy(caseNames, (n) => - defined(this.names.get(n)), - ); - this.forEachWithBlankLines(sortedCaseNames, blankLocations, f); + this.forEachWithBlankLines(caseNames, blankLocations, f); } protected forEachTransformation( diff --git a/test/unit/enum-order.test.ts b/test/unit/enum-order.test.ts new file mode 100644 index 000000000..da930ac15 --- /dev/null +++ b/test/unit/enum-order.test.ts @@ -0,0 +1,32 @@ +import { + InputData, + JSONSchemaInput, + quicktype, +} from "../../packages/quicktype-core/src/index.js"; +import { expect, test } from "vitest"; + +const schema = JSON.stringify({ + $schema: "http://json-schema.org/draft-04/schema#", + title: "Test", + type: "object", + properties: { + errorCode: { + type: "string", + enum: ["B", "A", "E"], + }, + }, +}); + +test("preserves JSON Schema enum case order", async () => { + const schemaInput = new JSONSchemaInput(undefined); + await schemaInput.addSource({ name: "Test", schema }); + + const inputData = new InputData(); + inputData.addInput(schemaInput); + + const result = await quicktype({ inputData, lang: "c++" }); + + expect(result.lines).toContain( + " enum class ErrorCode : int { B, A, E };", + ); +});