switch to length fn
This commit is contained in:
80
test.ce
80
test.ce
@@ -43,7 +43,7 @@ function get_current_package_name() {
|
||||
// cell test package all - run all tests from all packages
|
||||
|
||||
function parse_args() {
|
||||
if (args.length == 0) {
|
||||
if (length(args) == 0) {
|
||||
// cell test - run all tests for current package
|
||||
if (!is_valid_package('.')) {
|
||||
log.console('No cell.toml found in current directory')
|
||||
@@ -64,7 +64,7 @@ function parse_args() {
|
||||
}
|
||||
|
||||
if (args[0] == 'package') {
|
||||
if (args.length < 2) {
|
||||
if (length(args) < 2) {
|
||||
log.console('Usage: cell test package <name> [test]')
|
||||
log.console(' cell test package all')
|
||||
return false
|
||||
@@ -102,7 +102,7 @@ function parse_args() {
|
||||
}
|
||||
}
|
||||
|
||||
if (args.length >= 3) {
|
||||
if (length(args) >= 3) {
|
||||
// cell test package <name> <test>
|
||||
target_test = args[2]
|
||||
}
|
||||
@@ -146,7 +146,7 @@ function ensure_dir(path) {
|
||||
|
||||
var parts = array(path, '/')
|
||||
var current = starts_with(path, '/') ? '/' : ''
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
for (var i = 0; i < length(parts); i++) {
|
||||
if (parts[i] == '') continue
|
||||
current += parts[i] + '/'
|
||||
if (!fd.is_dir(current)) {
|
||||
@@ -176,7 +176,7 @@ function collect_actor_tests(package_name, specific_test) {
|
||||
|
||||
var files = pkg.list_files(package_name)
|
||||
var actor_tests = []
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
for (var i = 0; i < length(files); i++) {
|
||||
var f = files[i]
|
||||
// Check if file is in tests/ folder and is a .ce actor
|
||||
if (starts_with(f, "tests/") && ends_with(f, ".ce")) {
|
||||
@@ -247,7 +247,7 @@ function run_tests(package_name, specific_test) {
|
||||
|
||||
var files = pkg.list_files(package_name)
|
||||
var test_files = []
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
for (var i = 0; i < length(files); i++) {
|
||||
var f = files[i]
|
||||
// Check if file is in tests/ folder and is a .cm module (not .ce - those are actor tests)
|
||||
if (starts_with(f, "tests/") && ends_with(f, ".cm")) {
|
||||
@@ -264,12 +264,12 @@ function run_tests(package_name, specific_test) {
|
||||
}
|
||||
}
|
||||
|
||||
if (test_files.length > 0) {
|
||||
if (length(test_files) > 0) {
|
||||
if (package_name) log.console(`Running tests for ${package_name}`)
|
||||
else log.console(`Running tests for local package`)
|
||||
}
|
||||
|
||||
for (var i = 0; i < test_files.length; i++) {
|
||||
for (var i = 0; i < length(test_files); i++) {
|
||||
var f = test_files[i]
|
||||
var mod_path = text(f, 0, -3) // remove .cm
|
||||
|
||||
@@ -297,9 +297,9 @@ function run_tests(package_name, specific_test) {
|
||||
}
|
||||
}
|
||||
|
||||
if (tests.length > 0) {
|
||||
if (length(tests) > 0) {
|
||||
log.console(` ${f}`)
|
||||
for (var j = 0; j < tests.length; j++) {
|
||||
for (var j = 0; j < length(tests); j++) {
|
||||
var t = tests[j]
|
||||
var test_entry = {
|
||||
package: pkg_result.package,
|
||||
@@ -381,7 +381,7 @@ if (all_pkgs) {
|
||||
|
||||
// Then all packages in lock
|
||||
var packages = shop.list_packages()
|
||||
for (var i = 0; i < packages.length; i++) {
|
||||
for (var i = 0; i < length(packages); i++) {
|
||||
all_results.push(run_tests(packages[i], null))
|
||||
all_actor_tests = array(all_actor_tests, collect_actor_tests(packages[i], null))
|
||||
}
|
||||
@@ -391,9 +391,9 @@ if (all_pkgs) {
|
||||
}
|
||||
|
||||
// Spawn actor tests if any
|
||||
if (all_actor_tests.length > 0) {
|
||||
log.console(`Running ${all_actor_tests.length} actor test(s)...`)
|
||||
for (var i = 0; i < all_actor_tests.length; i++) {
|
||||
if (length(all_actor_tests) > 0) {
|
||||
log.console(`Running ${length(all_actor_tests)} actor test(s)...`)
|
||||
for (var i = 0; i < length(all_actor_tests); i++) {
|
||||
spawn_actor_test(all_actor_tests[i])
|
||||
}
|
||||
}
|
||||
@@ -402,7 +402,7 @@ if (all_actor_tests.length > 0) {
|
||||
function handle_actor_message(msg) {
|
||||
var sender = msg.$sender
|
||||
var found_idx = -1
|
||||
for (var i = 0; i < pending_actor_tests.length; i++) {
|
||||
for (var i = 0; i < length(pending_actor_tests); i++) {
|
||||
if (pending_actor_tests[i].actor == sender) {
|
||||
found_idx = i
|
||||
break
|
||||
@@ -426,12 +426,12 @@ function handle_actor_message(msg) {
|
||||
results = [msg]
|
||||
}
|
||||
|
||||
for (var i = 0; i < results.length; i++) {
|
||||
for (var i = 0; i < length(results); i++) {
|
||||
var res = results[i] || {}
|
||||
var entry = {
|
||||
package: base_entry.package,
|
||||
file: base_entry.file,
|
||||
test: res.test || base_entry.test + (results.length > 1 ? `#${i+1}` : ""),
|
||||
test: res.test || base_entry.test + (length(results) > 1 ? `#${i+1}` : ""),
|
||||
status: "failed",
|
||||
duration_ns: duration_ns
|
||||
}
|
||||
@@ -459,7 +459,7 @@ function check_timeouts() {
|
||||
var now = time.number()
|
||||
var timed_out = []
|
||||
|
||||
for (var i = pending_actor_tests.length - 1; i >= 0; i--) {
|
||||
for (var i = length(pending_actor_tests) - 1; i >= 0; i--) {
|
||||
var entry = pending_actor_tests[i]
|
||||
var elapsed_ms = (now - entry.start_time) * 1000
|
||||
if (elapsed_ms > ACTOR_TEST_TIMEOUT) {
|
||||
@@ -467,7 +467,7 @@ function check_timeouts() {
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < timed_out.length; i++) {
|
||||
for (var i = 0; i < length(timed_out); i++) {
|
||||
var idx = timed_out[i]
|
||||
var entry = pending_actor_tests[idx]
|
||||
pending_actor_tests.splice(idx, 1)
|
||||
@@ -479,7 +479,7 @@ function check_timeouts() {
|
||||
log.console(` TIMEOUT ${entry.test}`)
|
||||
}
|
||||
|
||||
if (pending_actor_tests.length > 0) {
|
||||
if (length(pending_actor_tests) > 0) {
|
||||
$delay(check_timeouts, 1000)
|
||||
}
|
||||
check_completion()
|
||||
@@ -489,7 +489,7 @@ function check_timeouts() {
|
||||
var finalized = false
|
||||
function check_completion() {
|
||||
if (finalized) return
|
||||
if (pending_actor_tests.length > 0) return
|
||||
if (length(pending_actor_tests) > 0) return
|
||||
|
||||
finalized = true
|
||||
finalize_results()
|
||||
@@ -497,10 +497,10 @@ function check_completion() {
|
||||
|
||||
function finalize_results() {
|
||||
// Add actor test results to all_results
|
||||
for (var i = 0; i < actor_test_results.length; i++) {
|
||||
for (var i = 0; i < length(actor_test_results); i++) {
|
||||
var r = actor_test_results[i]
|
||||
var pkg_result = null
|
||||
for (var j = 0; j < all_results.length; j++) {
|
||||
for (var j = 0; j < length(all_results); j++) {
|
||||
if (all_results[j].package == r.package) {
|
||||
pkg_result = all_results[j]
|
||||
break
|
||||
@@ -512,7 +512,7 @@ function finalize_results() {
|
||||
}
|
||||
|
||||
var file_result = null
|
||||
for (var j = 0; j < pkg_result.files.length; j++) {
|
||||
for (var j = 0; j < length(pkg_result.files); j++) {
|
||||
if (pkg_result.files[j].name == r.file) {
|
||||
file_result = pkg_result.files[j]
|
||||
break
|
||||
@@ -536,7 +536,7 @@ function finalize_results() {
|
||||
|
||||
// Calculate totals
|
||||
var totals = { total: 0, passed: 0, failed: 0 }
|
||||
for (var i = 0; i < all_results.length; i++) {
|
||||
for (var i = 0; i < length(all_results); i++) {
|
||||
totals.total += all_results[i].total
|
||||
totals.passed += all_results[i].passed
|
||||
totals.failed += all_results[i].failed
|
||||
@@ -551,9 +551,9 @@ function finalize_results() {
|
||||
|
||||
// If no actor tests, finalize immediately
|
||||
var totals
|
||||
if (all_actor_tests.length == 0) {
|
||||
if (length(all_actor_tests) == 0) {
|
||||
totals = { total: 0, passed: 0, failed: 0 }
|
||||
for (var i = 0; i < all_results.length; i++) {
|
||||
for (var i = 0; i < length(all_results); i++) {
|
||||
totals.total += all_results[i].total
|
||||
totals.passed += all_results[i].passed
|
||||
totals.failed += all_results[i].failed
|
||||
@@ -577,24 +577,24 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
|
||||
|
||||
=== SUMMARY ===
|
||||
`
|
||||
for (var i = 0; i < all_results.length; i++) {
|
||||
for (var i = 0; i < length(all_results); i++) {
|
||||
var pkg_res = all_results[i]
|
||||
if (pkg_res.total == 0) continue
|
||||
txt_report += `Package: ${pkg_res.package}\n`
|
||||
for (var j = 0; j < pkg_res.files.length; j++) {
|
||||
for (var j = 0; j < length(pkg_res.files); j++) {
|
||||
var f = pkg_res.files[j]
|
||||
var status = f.failed == 0 ? "PASS" : "FAIL"
|
||||
txt_report += ` [${status}] ${f.name} (${f.passed}/${f.tests.length})\n`
|
||||
txt_report += ` [${status}] ${f.name} (${f.passed}/${length(f.tests)})\n`
|
||||
}
|
||||
}
|
||||
|
||||
txt_report += `\n=== FAILURES ===\n`
|
||||
var has_failures = false
|
||||
for (var i = 0; i < all_results.length; i++) {
|
||||
for (var i = 0; i < length(all_results); i++) {
|
||||
var pkg_res = all_results[i]
|
||||
for (var j = 0; j < pkg_res.files.length; j++) {
|
||||
for (var j = 0; j < length(pkg_res.files); j++) {
|
||||
var f = pkg_res.files[j]
|
||||
for (var k = 0; k < f.tests.length; k++) {
|
||||
for (var k = 0; k < length(f.tests); k++) {
|
||||
var t = f.tests[k]
|
||||
if (t.status == "failed") {
|
||||
has_failures = true
|
||||
@@ -613,13 +613,13 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
|
||||
if (!has_failures) txt_report += `None\n`
|
||||
|
||||
txt_report += `\n=== DETAILED RESULTS ===\n`
|
||||
for (var i = 0; i < all_results.length; i++) {
|
||||
for (var i = 0; i < length(all_results); i++) {
|
||||
var pkg_res = all_results[i]
|
||||
if (pkg_res.total == 0) continue
|
||||
|
||||
for (var j = 0; j < pkg_res.files.length; j++) {
|
||||
for (var j = 0; j < length(pkg_res.files); j++) {
|
||||
var f = pkg_res.files[j]
|
||||
for (var k = 0; k < f.tests.length; k++) {
|
||||
for (var k = 0; k < length(f.tests); k++) {
|
||||
var t = f.tests[k]
|
||||
var dur = `${t.duration_ns || 0}ns`
|
||||
var status = t.status == "passed" ? "PASS" : "FAIL"
|
||||
@@ -632,14 +632,14 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
|
||||
log.console(`Report written to ${report_dir}/test.txt`)
|
||||
|
||||
// Generate JSON per package
|
||||
for (var i = 0; i < all_results.length; i++) {
|
||||
for (var i = 0; i < length(all_results); i++) {
|
||||
var pkg_res = all_results[i]
|
||||
if (pkg_res.total == 0) continue
|
||||
|
||||
var pkg_tests = []
|
||||
for (var j = 0; j < pkg_res.files.length; j++) {
|
||||
for (var j = 0; j < length(pkg_res.files); j++) {
|
||||
var f = pkg_res.files[j]
|
||||
for (var k = 0; k < f.tests.length; k++) {
|
||||
for (var k = 0; k < length(f.tests); k++) {
|
||||
pkg_tests.push(f.tests[k])
|
||||
}
|
||||
}
|
||||
@@ -650,7 +650,7 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed}
|
||||
}
|
||||
|
||||
// If no actor tests, generate reports and stop immediately
|
||||
if (all_actor_tests.length == 0) {
|
||||
if (length(all_actor_tests) == 0) {
|
||||
generate_reports(totals)
|
||||
$stop()
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user