From 20f19a5d9ba3bae6a8cfbff5a3a6a32e36b5c875 Mon Sep 17 00:00:00 2001 From: kgui Date: Mon, 10 Jan 2022 12:17:32 +0800 Subject: [PATCH] Add JSON data related struct and function into context. Test: local test Change-Id: I7a2000b458378f240cd6481066c15dec98d110ea --- context.go | 20 ++++++++++++++++++++ context_test.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/context.go b/context.go index f7cddfc..92c5d30 100644 --- a/context.go +++ b/context.go @@ -2300,6 +2300,26 @@ type JSONDataSupplier interface { AddJSONData(d *map[string]interface{}) } +// A JSONDataAction contains the inputs and outputs of actions of a module. Which helps pass such +// data to be included in the JSON module graph. +type JSONDataAction struct { + Inputs []string + Outputs []string +} + +// FormatJSONDataActions puts the content of a list of JSONDataActions into a standard format to be +// appended into the JSON module graph. +func FormatJSONDataActions(jsonDataActions []JSONDataAction) []map[string]interface{} { + var actions []map[string]interface{} + for _, jsonDataAction := range jsonDataActions { + actions = append(actions, map[string]interface{}{ + "Inputs": jsonDataAction.Inputs, + "Outputs": jsonDataAction.Outputs, + }) + } + return actions +} + func jsonModuleFromModuleInfo(m *moduleInfo) *JsonModule { result := &JsonModule{ jsonModuleName: *jsonModuleNameFromModuleInfo(m), diff --git a/context_test.go b/context_test.go index 6308ba9..915f273 100644 --- a/context_test.go +++ b/context_test.go @@ -607,6 +607,39 @@ func TestParseFailsForModuleWithoutName(t *testing.T) { } } +func TestFormatJSONDataActions(t *testing.T) { + inputs := []string{"fake/input/1", "fake/input/2"} + outputs := []string{"fake/output/1", "fake/output/2"} + jsonDataActionEmptyInputs := JSONDataAction{ + Outputs: outputs, + } + jsonDataActionEmptyOutputs := JSONDataAction{ + Inputs: inputs, + } + jsonDataAction := JSONDataAction{ + Inputs: inputs, + Outputs: outputs, + } + formatData := FormatJSONDataActions([]JSONDataAction{ + jsonDataActionEmptyInputs, jsonDataActionEmptyOutputs, jsonDataAction}) + if fmt.Sprint(formatData) != fmt.Sprint([]map[string]interface{}{ + map[string]interface{}{ + "Inputs": []string{}, + "Outputs": outputs, + }, + map[string]interface{}{ + "Inputs": inputs, + "Outputs": []string{}, + }, + map[string]interface{}{ + "Inputs": inputs, + "Outputs": outputs, + }, + }) { + t.Errorf("The formatted JSON data %s isn't expected.", formatData) + } +} + func Test_findVariant(t *testing.T) { module := &moduleInfo{ variant: variant{