Path: blob/main/src/vs/base/test/common/jsonSchema.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4import assert from 'assert';5import { getCompressedContent, IJSONSchema } from '../../common/jsonSchema.js';6import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js';78suite('JSON Schema', () => {910ensureNoDisposablesAreLeakedInTestSuite();1112test('getCompressedContent 1', () => {1314const schema: IJSONSchema = {15type: 'object',16properties: {17a: {18type: 'object',19description: 'a',20properties: {21b: {22type: 'object',23properties: {24c: {25type: 'object',26properties: {27d: {28type: 'string'29}30}31}32}33}34}35},36e: {37type: 'object',38description: 'e',39properties: {40b: {41type: 'object',42properties: {43c: {44type: 'object',45properties: {46d: {47type: 'string'48}49}50}51}52}53}54}55}56};5758const expected: IJSONSchema = {59type: 'object',60properties: {61a: {62type: 'object',63description: 'a',64properties: {65b: {66$ref: '#/$defs/_0'67}68}69},70e: {71type: 'object',72description: 'e',73properties: {74b: {75$ref: '#/$defs/_0'76}77}78}79},80$defs: {81"_0": {82type: 'object',83properties: {84c: {85type: 'object',86properties: {87d: {88type: 'string'89}90}91}92}93}94}9596};9798assert.deepEqual(getCompressedContent(schema), JSON.stringify(expected));99});100101test('getCompressedContent 2', () => {102103const schema: IJSONSchema = {104type: 'object',105properties: {106a: {107type: 'object',108properties: {109b: {110type: 'object',111properties: {112c: {113type: 'object',114properties: {115d: {116type: 'string'117}118}119}120}121}122}123},124e: {125type: 'object',126properties: {127b: {128type: 'object',129properties: {130c: {131type: 'object',132properties: {133d: {134type: 'string'135}136}137}138}139}140}141}142}143};144145const expected: IJSONSchema = {146type: 'object',147properties: {148a: {149$ref: '#/$defs/_0'150151},152e: {153$ref: '#/$defs/_0'154}155},156$defs: {157"_0": {158type: 'object',159properties: {160b: {161type: 'object',162properties: {163c: {164type: 'object',165properties: {166d: {167type: 'string'168}169}170}171}172}173}174}175}176177};178179assert.deepEqual(getCompressedContent(schema), JSON.stringify(expected));180});181182test('getCompressedContent 3', () => {183184185const schema: IJSONSchema = {186type: 'object',187properties: {188a: {189type: 'object',190oneOf: [191{192allOf: [193{194properties: {195name: {196type: 'string'197},198description: {199type: 'string'200}201}202},203{204properties: {205street: {206type: 'string'207},208}209}210]211},212{213allOf: [214{215properties: {216name: {217type: 'string'218},219description: {220type: 'string'221}222}223},224{225properties: {226river: {227type: 'string'228},229}230}231]232},233{234allOf: [235{236properties: {237name: {238type: 'string'239},240description: {241type: 'string'242}243}244},245{246properties: {247mountain: {248type: 'string'249},250}251}252]253}254]255},256b: {257type: 'object',258properties: {259street: {260properties: {261street: {262type: 'string'263}264}265}266}267}268}269};270271const expected: IJSONSchema = {272"type": "object",273"properties": {274"a": {275"type": "object",276"oneOf": [277{278"allOf": [279{280"$ref": "#/$defs/_0"281},282{283"$ref": "#/$defs/_1"284}285]286},287{288"allOf": [289{290"$ref": "#/$defs/_0"291},292{293"properties": {294"river": {295"type": "string"296}297}298}299]300},301{302"allOf": [303{304"$ref": "#/$defs/_0"305},306{307"properties": {308"mountain": {309"type": "string"310}311}312}313]314}315]316},317"b": {318"type": "object",319"properties": {320"street": {321"$ref": "#/$defs/_1"322}323}324}325},326"$defs": {327"_0": {328"properties": {329"name": {330"type": "string"331},332"description": {333"type": "string"334}335}336},337"_1": {338"properties": {339"street": {340"type": "string"341}342}343}344}345};346347const actual = getCompressedContent(schema);348assert.deepEqual(actual, JSON.stringify(expected));349});350351test('getCompressedContent 4', () => {352353const schema: IJSONSchema = {354type: 'object',355properties: {356a: {357type: 'object',358properties: {359b: {360type: 'object',361properties: {362c: {363type: 'object',364properties: {365d: {366type: 'string'367}368}369}370}371}372}373},374e: {375type: 'object',376properties: {377b: {378type: 'object',379properties: {380c: {381type: 'object',382properties: {383d: {384type: 'string'385}386}387}388}389}390}391},392f: {393type: 'object',394properties: {395d: {396type: 'string'397}398}399}400}401};402403const expected: IJSONSchema = {404type: 'object',405properties: {406a: {407$ref: '#/$defs/_0'408},409e: {410$ref: '#/$defs/_0'411},412f: {413$ref: '#/$defs/_1'414}415},416$defs: {417"_0": {418type: 'object',419properties: {420b: {421type: 'object',422properties: {423c: {424$ref: '#/$defs/_1'425}426}427}428}429},430"_1": {431type: 'object',432properties: {433d: {434type: 'string'435}436}437}438}439440};441442assert.deepEqual(getCompressedContent(schema), JSON.stringify(expected));443});444445test('getCompressedContent 5', () => {446447const schema: IJSONSchema = {448type: 'object',449properties: {450a: {451type: 'array',452items: {453type: 'object',454properties: {455c: {456type: 'object',457properties: {458d: {459type: 'string'460}461}462}463}464}465},466e: {467type: 'array',468items: {469type: 'object',470properties: {471c: {472type: 'object',473properties: {474d: {475type: 'string'476}477}478}479}480}481},482f: {483type: 'object',484properties: {485b: {486type: 'object',487properties: {488c: {489type: 'object',490properties: {491d: {492type: 'string'493}494}495}496}497}498}499},500g: {501type: 'object',502properties: {503b: {504type: 'object',505properties: {506c: {507type: 'object',508properties: {509d: {510type: 'string'511}512}513}514}515}516}517}518}519};520521const expected: IJSONSchema = {522type: 'object',523properties: {524a: {525$ref: '#/$defs/_0'526},527e: {528$ref: '#/$defs/_0'529},530f: {531$ref: '#/$defs/_1'532},533g: {534$ref: '#/$defs/_1'535}536},537$defs: {538"_0": {539type: 'array',540items: {541$ref: '#/$defs/_2'542}543},544"_1": {545type: 'object',546properties: {547b: {548$ref: '#/$defs/_2'549}550}551},552"_2": {553type: 'object',554properties: {555c: {556type: 'object',557properties: {558d: {559type: 'string'560}561}562}563}564}565}566567};568569assert.deepEqual(getCompressedContent(schema), JSON.stringify(expected));570});571572573});574575576