Add JSON data related struct and function into context.
Test: local test
Change-Id: I7a2000b458378f240cd6481066c15dec98d110ea
diff --git a/context.go b/context.go
index f7cddfc..92c5d30 100644
--- a/context.go
+++ b/context.go
@@ -2300,6 +2300,26 @@
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 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{