
LayersTest.pudu
Pudu38 lines2.3 KB
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 Layers8910fn entry(key: Str, value: Str) -> Layers.Entry { Layers.Entry{key: key, value: value} }111213fn 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