| 758 | } |
| 759 | |
| 760 | func TestParseSetNestedLevels(t *testing.T) { |
| 761 | var keyMultipleNestedLevels strings.Builder |
| 762 | for i := 1; i <= MaxNestedNameLevel+2; i++ { |
| 763 | tmpStr := fmt.Sprintf("name%d", i) |
| 764 | if i <= MaxNestedNameLevel+1 { |
| 765 | tmpStr = tmpStr + "." |
| 766 | } |
| 767 | keyMultipleNestedLevels.WriteString(tmpStr) |
| 768 | } |
| 769 | tests := []struct { |
| 770 | str string |
| 771 | expect map[string]any |
| 772 | err bool |
| 773 | errStr string |
| 774 | }{ |
| 775 | { |
| 776 | "outer.middle.inner=value", |
| 777 | map[string]any{"outer": map[string]any{"middle": map[string]any{"inner": "value"}}}, |
| 778 | false, |
| 779 | "", |
| 780 | }, |
| 781 | { |
| 782 | str: keyMultipleNestedLevels.String() + "=value", |
| 783 | err: true, |
| 784 | errStr: fmt.Sprintf("value name nested level is greater than maximum supported nested level of %d", |
| 785 | MaxNestedNameLevel), |
| 786 | }, |
| 787 | } |
| 788 | |
| 789 | for _, tt := range tests { |
| 790 | got, err := Parse(tt.str) |
| 791 | if err != nil { |
| 792 | if tt.err { |
| 793 | if tt.errStr != "" { |
| 794 | if err.Error() != tt.errStr { |
| 795 | t.Errorf("Expected error: %s. Got error: %s", tt.errStr, err.Error()) |
| 796 | } |
| 797 | } |
| 798 | continue |
| 799 | } |
| 800 | t.Fatalf("%s: %s", tt.str, err) |
| 801 | } |
| 802 | if tt.err { |
| 803 | t.Errorf("%s: Expected error. Got nil", tt.str) |
| 804 | } |
| 805 | |
| 806 | y1, err := yaml.Marshal(tt.expect) |
| 807 | if err != nil { |
| 808 | t.Fatal(err) |
| 809 | } |
| 810 | y2, err := yaml.Marshal(got) |
| 811 | if err != nil { |
| 812 | t.Fatalf("Error serializing parsed value: %s", err) |
| 813 | } |
| 814 | |
| 815 | if string(y1) != string(y2) { |
| 816 | t.Errorf("%s: Expected:\n%s\nGot:\n%s", tt.str, y1, y2) |
| 817 | } |