Unify trunk on main: initialization → main #3
@@ -0,0 +1,31 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/novox/mesh-host/internal/declaration"
|
||||
)
|
||||
|
||||
// Every shape in the vocabulary is implemented by a host that claims to do everything.
|
||||
//
|
||||
// **Added because adding a shape and forgetting this was silent here and loud there.** The
|
||||
// `network` shape parsed, validated, applied and removed, and a full host still refused every
|
||||
// declaration containing one — correctly, because it does not do half a declaration. The count
|
||||
// test above passed throughout: it checks what the language has, not what a host can do.
|
||||
func TestAFullHostImplementsEveryShapeTheLanguageHas(t *testing.T) {
|
||||
does := map[declaration.Type]bool{}
|
||||
for _, s := range All() {
|
||||
if s.Name() != "arch" {
|
||||
continue
|
||||
}
|
||||
for _, shape := range s.Shapes() {
|
||||
does[shape] = true
|
||||
}
|
||||
}
|
||||
for _, shape := range declaration.Vocabulary() {
|
||||
if !does[shape] {
|
||||
t.Errorf("the language has %q and a full host cannot apply it, so every declaration "+
|
||||
"carrying one is refused whole", shape)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -166,6 +166,9 @@ func everyShape() []declaration.Type {
|
||||
declaration.TypeDirectory, declaration.TypeFile, declaration.TypeService,
|
||||
declaration.TypePackage, declaration.TypeContainer, declaration.TypeAction,
|
||||
declaration.TypeUser, declaration.TypeArchive,
|
||||
// A network needs the same runtime a container does, so a host that can run one can make
|
||||
// the other. Not in portableShapes for exactly that reason.
|
||||
declaration.TypeNetwork,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user