Skip to content

feat: add all node.js API tests and reference docs #112

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
595 changes: 595 additions & 0 deletions nodejs/README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion nodejs/__test__/exec_program.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ import test from 'ava'
import { execProgram, ExecProgramArgs } from '../index.js'

test('execProgram', (t) => {
const result = execProgram(ExecProgramArgs(['__test__/test_data/schema.k']))
const result = execProgram(new ExecProgramArgs(['__test__/test_data/schema.k']))
t.is(result.yamlResult, 'app:\n replicas: 2')
})
2 changes: 1 addition & 1 deletion nodejs/__test__/exec_program_file_not_found.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { execProgram, ExecProgramArgs } from '../index.js'

test('execProgramFileNotFound', (t) => {
try {
const result = execProgram(ExecProgramArgs(['__test__/test_data/file_not_found.k']))
const result = execProgram(new ExecProgramArgs(['__test__/test_data/file_not_found.k']))
t.is(result.yamlResult, 'app:\n replicas: 2')
} catch (error) {
t.is(error.message, 'Cannot find the kcl file, please check the file path __test__/test_data/file_not_found.k')
Expand Down
23 changes: 23 additions & 0 deletions nodejs/__test__/exec_with_update_dependencies.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import test from 'ava'

import { execProgram, ExecProgramArgs, updateDependencies, UpdateDependenciesArgs } from '../index.js'

test('execWithUpdateDependencies', (t) => {
const result = updateDependencies(new UpdateDependenciesArgs('./__test__/test_data/update_dependencies', false))
const execResult = execProgram(
new ExecProgramArgs(
['./__test__/test_data/update_dependencies/main.k'],
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
result.externalPkgs,
),
)
t.is(execResult.yamlResult, 'a: Hello World!')
})
26 changes: 26 additions & 0 deletions nodejs/__test__/format_code.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import test from 'ava'

import { formatCode, FormatCodeArgs } from '../index.js'

test('formatCode', (t) => {
const schemaCode = `
schema Person:
name: str
age: int

check:
0 < age < 120
`
const result = formatCode(new FormatCodeArgs(schemaCode))
t.is(
result.formatted,
`schema Person:
name: str
age: int

check:
0 < age < 120

`,
)
})
8 changes: 8 additions & 0 deletions nodejs/__test__/format_path.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import test from 'ava'

import { formatPath, FormatPathArgs } from '../index.js'

test('formatPath', (t) => {
const result = formatPath(new FormatPathArgs('__test__/test_data/format_path/test.k'))
t.is(result.changedPaths.length, 0)
})
8 changes: 8 additions & 0 deletions nodejs/__test__/get_schema_type_mapping.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import test from 'ava'

import { getSchemaTypeMapping, GetSchemaTypeMappingArgs } from '../index.js'

test('getSchemaTypeMapping', (t) => {
const result = getSchemaTypeMapping(new GetSchemaTypeMappingArgs(['__test__/test_data/schema.k']))
t.is(result.schemaTypeMapping['app'], 'schema')
})
9 changes: 9 additions & 0 deletions nodejs/__test__/get_version.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import test from 'ava'

import { getVersion } from '../index.js'

test('getVersion', (t) => {
const result = getVersion()
t.is(result.versionInfo.includes('Version'), true)
t.is(result.versionInfo.includes('GitCommit'), true)
})
8 changes: 8 additions & 0 deletions nodejs/__test__/lint_path.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import test from 'ava'

import { lintPath, LintPathArgs } from '../index.js'

test('lintPath', (t) => {
const result = lintPath(new LintPathArgs(['__test__/test_data/lint_path/test-lint.k']))
t.is(result.results.includes("Module 'math' imported but unused"), true)
})
10 changes: 10 additions & 0 deletions nodejs/__test__/list_options.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import test from 'ava'

import { listOptions, ListOptionsArgs } from '../index.js'

test('listOptions', (t) => {
const result = listOptions(new ListOptionsArgs(['__test__/test_data/option/main.k']))
t.is(result.options[0].name, 'key1')
t.is(result.options[1].name, 'key2')
t.is(result.options[2].name, 'metadata-key')
})
2 changes: 1 addition & 1 deletion nodejs/__test__/list_variables.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ import test from 'ava'
import { listVariables, ListVariablesArgs } from '../index.js'

test('listVariables', (t) => {
const result = listVariables(ListVariablesArgs(['__test__/test_data/schema.k'], []))
const result = listVariables(new ListVariablesArgs(['__test__/test_data/schema.k'], []))
t.is(result.variables['app'][0].value, 'AppConfig {replicas: 2}')
})
2 changes: 1 addition & 1 deletion nodejs/__test__/load_package.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import test from 'ava'
import { loadPackage, LoadPackageArgs } from '../index.js'

test('loadPackage', (t) => {
const result = loadPackage(LoadPackageArgs(['__test__/test_data/schema.k'], [], true))
const result = loadPackage(new LoadPackageArgs(['__test__/test_data/schema.k'], [], true))
t.deepEqual(result.parseErrors, [])
t.deepEqual(result.typeErrors, [])
})
13 changes: 13 additions & 0 deletions nodejs/__test__/load_settings_files.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import test from 'ava'

import { loadSettingsFiles, LoadSettingsFilesArgs } from '../index.js'

test('loadSettingsFiles', (t) => {
const result = loadSettingsFiles(
new LoadSettingsFilesArgs('./__test__/test_data', ['./__test__/test_data/settings/kcl.yaml']),
)
t.is(result.kclCliConfigs?.files.length, 0)
t.is(result.kclCliConfigs?.strictRangeCheck, true)
t.is(result.kclOptions[0].key, 'key')
t.is(result.kclOptions[0].value, '"value"')
})
2 changes: 1 addition & 1 deletion nodejs/__test__/override_file.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ import test from 'ava'
import { overrideFile, OverrideFileArgs } from '../index.js'

test('overrideFile', (t) => {
const result = overrideFile(OverrideFileArgs('__test__/test_data/override_file/config.k', ['app.replicas=4'], []))
const result = overrideFile(new OverrideFileArgs('__test__/test_data/override_file/config.k', ['app.replicas=4'], []))
t.is(result.result, true)
})
9 changes: 9 additions & 0 deletions nodejs/__test__/parse_file.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import test from 'ava'

import { parseFile, ParseFileArgs } from '../index.js'

test('parseFile', (t) => {
const result = parseFile(new ParseFileArgs('__test__/test_data/schema.k'))
t.is(result.deps.length, 0)
t.is(result.errors.length, 0)
})
9 changes: 9 additions & 0 deletions nodejs/__test__/parse_program.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import test from 'ava'

import { parseProgram, ParseProgramArgs } from '../index.js'

test('parseProgram', (t) => {
const result = parseProgram(new ParseProgramArgs(['__test__/test_data/schema.k']))
t.is(result.paths.length, 1)
t.is(result.errors.length, 0)
})
15 changes: 15 additions & 0 deletions nodejs/__test__/rename.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import test from 'ava'

import { rename, RenameArgs } from '../index.js'
import { readFileSync, writeFileSync } from 'fs'
import { join } from 'path'

test('rename', (t) => {
// Restore original content from backup
const originalContent = readFileSync(join('__test__/test_data/rename/main.bak'), 'utf8')
writeFileSync(join('__test__/test_data/rename/main.k'), originalContent)

const args = new RenameArgs('__test__/test_data/rename', 'a', ['__test__/test_data/rename/main.k'], 'a2')
const result = rename(args)
t.is(result.changedFiles.length, 1)
})
9 changes: 9 additions & 0 deletions nodejs/__test__/rename_code.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import test from 'ava'

import { renameCode, RenameCodeArgs } from '../index.js'

test('renameCode', (t) => {
const args = RenameCodeArgs('/mock/path', 'a', { '/mock/path/main.k': 'a = 1\nb = a' }, 'a2')
const result = renameCode(args)
t.is(result.changedCodes['/mock/path/main.k'], 'a2 = 1\nb = a2')
})
1 change: 1 addition & 0 deletions nodejs/__test__/test_data/format_path/test.k
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a = 1
5 changes: 5 additions & 0 deletions nodejs/__test__/test_data/get_schema_ty/aaa/kcl.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[package]
name = "aaa"
edition = "0.0.1"
version = "0.0.1"

10 changes: 10 additions & 0 deletions nodejs/__test__/test_data/get_schema_ty/aaa/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import bbb as b
import ccc as c

a = b.B {
name: "b instance in a"
}

a_c = c.C {
name: "c instance in a"
}
5 changes: 5 additions & 0 deletions nodejs/__test__/test_data/get_schema_ty/bbb/kcl.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[package]
name = "bbb"
edition = "0.0.1"
version = "0.0.1"

2 changes: 2 additions & 0 deletions nodejs/__test__/test_data/get_schema_ty/bbb/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
schema B:
name: str
5 changes: 5 additions & 0 deletions nodejs/__test__/test_data/get_schema_ty/ccc/kcl.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[package]
name = "ccc"
edition = "0.0.1"
version = "0.0.1"

2 changes: 2 additions & 0 deletions nodejs/__test__/test_data/get_schema_ty/ccc/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
schema C:
name: str
3 changes: 3 additions & 0 deletions nodejs/__test__/test_data/lint_path/test-lint.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import math

a = 1
5 changes: 5 additions & 0 deletions nodejs/__test__/test_data/option/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
a = option("key1")
b = option("key2", required=True)
c = {
metadata.key = option("metadata-key")
}
Empty file.
5 changes: 5 additions & 0 deletions nodejs/__test__/test_data/parse/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import pkg1
import pkg2

a1 = pkg1.a
a2 = pkg2.a
1 change: 1 addition & 0 deletions nodejs/__test__/test_data/parse/pkg1/pkg.k
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a = 1
1 change: 1 addition & 0 deletions nodejs/__test__/test_data/parse/pkg2/pkg.k
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a = 1
2 changes: 2 additions & 0 deletions nodejs/__test__/test_data/rename/main.bak
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
a = 1
b = a
2 changes: 2 additions & 0 deletions nodejs/__test__/test_data/rename/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
a2 = 1
b = a2
5 changes: 5 additions & 0 deletions nodejs/__test__/test_data/settings/kcl.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
kcl_cli_configs:
strict_range_check: true
kcl_options:
- key: key
value: value
3 changes: 3 additions & 0 deletions nodejs/__test__/test_data/testing/module/kcl.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[package]
name = "test_data"

3 changes: 3 additions & 0 deletions nodejs/__test__/test_data/testing/module/pkg/func.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
func = lambda x {
x
}
7 changes: 7 additions & 0 deletions nodejs/__test__/test_data/testing/module/pkg/func_test.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
test_func_0 = lambda {
assert func("a") == "a"
}

test_func_1 = lambda {
assert func("b") == "b"
}
8 changes: 8 additions & 0 deletions nodejs/__test__/test_data/update_dependencies/kcl.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
name = "mod_update"
edition = "0.0.1"
version = "0.0.1"

[dependencies]
helloworld = { oci = "oci://ghcr.io/kcl-lang/helloworld", tag = "0.1.0" }
flask = { git = "https://github.com/kcl-lang/flask-demo-kcl-manifests", commit = "ade147b" }
4 changes: 4 additions & 0 deletions nodejs/__test__/test_data/update_dependencies/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import helloworld
import flask

a = helloworld.The_first_kcl_program
3 changes: 3 additions & 0 deletions nodejs/__test__/test_data/variables/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
a = 1
b = [1, 2, 3]
c = {"a": "b"}
8 changes: 8 additions & 0 deletions nodejs/__test__/testing.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import test from 'ava'

import { test as kclTest, TestArgs } from '../index.js'

test('test', (t) => {
const result = kclTest(new TestArgs(['./__test__/test_data/testing/module/...']))
t.is(result.info.length, 2)
})
8 changes: 8 additions & 0 deletions nodejs/__test__/update_dependencies.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import test from 'ava'

import { updateDependencies, UpdateDependenciesArgs } from '../index.js'

test('updateDependencies', (t) => {
const result = updateDependencies(new UpdateDependenciesArgs('./__test__/test_data/update_dependencies', false))
t.is(result.externalPkgs.length, 2)
})
18 changes: 18 additions & 0 deletions nodejs/__test__/validate_code.spec.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import test from 'ava'

import { validateCode, ValidateCodeArgs } from '../index.js'

test('validateCode', (t) => {
const code = `
schema Person:
name: str
age: int

check:
0 < age < 120
`
const data = '{"name": "Alice", "age": 10}'
const result = validateCode(new ValidateCodeArgs(undefined, data, undefined, code))
t.is(result.success, true)
t.is(result.errMessage, '')
})
Loading
Loading