plasma-cpu-control-widget/tests/test_CpuReader.js

101 lines
3.6 KiB
JavaScript

// Tests for CpuReader.js logic
// Run with: node test_CpuReader.js
// Load the module (strip .pragma library for Node.js)
const fs = require("fs")
let src = fs.readFileSync(__dirname + "/../contents/ui/logic/CpuReader.js", "utf8")
src = src.replace(".pragma library", "")
src += "\nmodule.exports = { parseOutput, tempColor, tempLabel, clampPerf, buildReadCommand };"
const tmpFile = "/tmp/test_CpuReader_tmp.js"
fs.writeFileSync(tmpFile, src)
const Reader = require(tmpFile)
let passed = 0
let failed = 0
function assert(condition, message) {
if (condition) {
passed++
console.log(" PASS: " + message)
} else {
failed++
console.error(" FAIL: " + message)
}
}
function assertEqual(actual, expected, message) {
assert(actual === expected, message + " (got " + actual + ", expected " + expected + ")")
}
// --- parseOutput tests ---
console.log("\n=== parseOutput ===")
var r1 = Reader.parseOutput("94000:85")
assertEqual(r1.tempC, 94, "Normal: temp 94000 → 94°C")
assertEqual(r1.perf, 85, "Normal: perf 85%")
assertEqual(r1.valid, true, "Normal: valid=true")
var r2 = Reader.parseOutput("45500:100")
assertEqual(r2.tempC, 46, "Rounding: 45500 → 46°C")
assertEqual(r2.perf, 100, "Full perf: 100%")
var r3 = Reader.parseOutput("")
assertEqual(r3.valid, false, "Empty string: valid=false")
assertEqual(r3.perf, 100, "Empty string: default perf=100")
var r4 = Reader.parseOutput("garbage")
assertEqual(r4.valid, false, "Garbage: valid=false")
var r5 = Reader.parseOutput("0:50")
assertEqual(r5.valid, false, "Zero temp: valid=false")
var r6 = Reader.parseOutput("72000:5")
assertEqual(r6.perf, 10, "Perf below min clamped to 10")
var r7 = Reader.parseOutput("72000:150")
assertEqual(r7.perf, 100, "Perf above max clamped to 100")
// --- tempColor tests ---
console.log("\n=== tempColor ===")
assertEqual(Reader.tempColor(30), "#34c759", "30°C → green")
assertEqual(Reader.tempColor(49), "#34c759", "49°C → green")
assertEqual(Reader.tempColor(50), "#ffcc00", "50°C → yellow")
assertEqual(Reader.tempColor(64), "#ffcc00", "64°C → yellow")
assertEqual(Reader.tempColor(65), "#ff9500", "65°C → orange")
assertEqual(Reader.tempColor(79), "#ff9500", "79°C → orange")
assertEqual(Reader.tempColor(80), "#ff3b30", "80°C → red")
assertEqual(Reader.tempColor(95), "#ff3b30", "95°C → red")
// --- tempLabel tests ---
console.log("\n=== tempLabel ===")
assertEqual(Reader.tempLabel(30), "Cool", "30°C → Cool")
assertEqual(Reader.tempLabel(55), "Normal", "55°C → Normal")
assertEqual(Reader.tempLabel(70), "Warm", "70°C → Warm")
assertEqual(Reader.tempLabel(85), "Hot", "85°C → Hot")
// --- clampPerf tests ---
console.log("\n=== clampPerf ===")
assertEqual(Reader.clampPerf(50), 50, "50 → 50 (no change)")
assertEqual(Reader.clampPerf(0), 10, "0 → 10 (clamped min)")
assertEqual(Reader.clampPerf(5), 10, "5 → 10 (clamped min)")
assertEqual(Reader.clampPerf(200), 100, "200 → 100 (clamped max)")
assertEqual(Reader.clampPerf(10), 10, "10 → 10 (exact min)")
assertEqual(Reader.clampPerf(100), 100, "100 → 100 (exact max)")
// --- buildReadCommand tests ---
console.log("\n=== buildReadCommand ===")
var cmd = Reader.buildReadCommand()
assert(cmd.indexOf("thermal_zone") > -1, "Command contains thermal_zone")
assert(cmd.indexOf("x86_pkg_temp") > -1, "Command searches for x86_pkg_temp")
assert(cmd.indexOf("TCPU") > -1, "Command searches for TCPU")
assert(cmd.indexOf("max_perf_pct") > -1, "Command reads max_perf_pct")
// --- Summary ---
console.log("\n=== Results: " + passed + " passed, " + failed + " failed ===")
fs.unlinkSync(tmpFile)
process.exit(failed > 0 ? 1 : 0)