Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-environment

Environment files for Pudu: load .env variables safely with layered files, discovery, expansion, typed reads, and secrets kept out of every message

0.1.0Apache-2.01

InstallClose

LayersTest.pudu

Pudu38 lines2.3 KB

GitHub ↗
1/** @Test.Domain.Layers.Suite — merging layers and settling the view */2module PuduLangEnvironment.Domain.LayersTest34import Std.Io as Io5import Std.Map as Map6import Std.Test as Test7import PuduLangEnvironment.Domain.Layers as Layers89/// An entry.10fn entry(key: Str, value: Str) -> Layers.Entry { Layers.Entry{key: key, value: value} }1112/// Runs the suite.13fn main() -> Int {14  let layers = [[entry("A", "1"), entry("B", "2"), entry("A", "3")], [entry("B", "4"), entry("C", "5")]]15  let loaded = Map.fromPairs(&[("A", "file"), ("B", "file"), ("C", "file")])16  let process = Map.fromPairs(&[("A", "shell"), ("B", ""), ("D", "shell")])17  let over = Layers.settle(&loaded, &process, true)18  let under = Layers.settle(&loaded, &process, false)19  let checks = Test.suite("Domain.Layers", &[20      Test.equals("keep stores a new key", &Layers.keep(&Map.empty(), "A", "1", false), &Map.fromPairs(&[("A", "1")])),21      Test.equals("keep replaces when overwriting", &Layers.keep(&Map.fromPairs(&[("A", "1")]), "A", "2", true), &Map.fromPairs(&[("A", "2")])),22      Test.equals("keep holds the first without overwriting", &Layers.keep(&Map.fromPairs(&[("A", "1")]), "A", "2", false), &Map.fromPairs(&[("A", "1")])),23      Test.equals("later entries win when overwriting", &Layers.merge(&layers, true), &Map.fromPairs(&[("A", "3"), ("B", "4"), ("C", "5")])),24      Test.equals("the first entries win without overwriting", &Layers.merge(&layers, false), &Map.fromPairs(&[("A", "1"), ("B", "2"), ("C", "5")])),25      Test.equals("no layers merge to nothing", &Layers.merge(&[], true), &Map.empty()),26      Test.equals("overwriting replaces process values", &over.values, &Map.fromPairs(&[("A", "file"), ("B", "file"), ("C", "file"), ("D", "shell")])),27      Test.equals("overwriting applies every loaded key in order", &over.applied, &["A", "B", "C"]),28      Test.equals("without overwriting a set process value is kept", &under.values, &Map.fromPairs(&[("A", "shell"), ("B", "file"), ("C", "file"), ("D", "shell")])),29      Test.equals("without overwriting an empty or unset process value is applied", &under.applied, &["B", "C"]),30      Test.equals("applied keys are sorted", &Layers.settle(&Map.fromPairs(&[("Z", "1"), ("M", "2"), ("A", "3")]), &Map.empty(), true).applied, &["A", "M", "Z"])31    ])32  let ran = Test.run(&checks)33  for failure in Test.failuresOf(&ran) {34    let _reported = Io.writeErrorLine(failure)35  }36  Test.report(&ran)37}38