allow passing noninitialized *filesystem.File values
This commit is contained in:
+6
-2
@@ -732,12 +732,16 @@ func (f *FileField) toSliceValue(raw any) []any {
|
|||||||
case nil:
|
case nil:
|
||||||
// nothing to cast
|
// nothing to cast
|
||||||
case *filesystem.File:
|
case *filesystem.File:
|
||||||
result = append(result, value)
|
if value != nil {
|
||||||
|
result = append(result, value)
|
||||||
|
}
|
||||||
case filesystem.File:
|
case filesystem.File:
|
||||||
result = append(result, &value)
|
result = append(result, &value)
|
||||||
case []*filesystem.File:
|
case []*filesystem.File:
|
||||||
for _, v := range value {
|
for _, v := range value {
|
||||||
result = append(result, v)
|
if v != nil {
|
||||||
|
result = append(result, v)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case []filesystem.File:
|
case []filesystem.File:
|
||||||
for _, v := range value {
|
for _, v := range value {
|
||||||
|
|||||||
@@ -103,6 +103,8 @@ func TestFileFieldPrepareValue(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var nilFile *filesystem.File
|
||||||
|
|
||||||
scenarios := []struct {
|
scenarios := []struct {
|
||||||
raw any
|
raw any
|
||||||
field *core.FileField
|
field *core.FileField
|
||||||
@@ -114,8 +116,9 @@ func TestFileFieldPrepareValue(t *testing.T) {
|
|||||||
{123, &core.FileField{MaxSelect: 1}, `"123"`},
|
{123, &core.FileField{MaxSelect: 1}, `"123"`},
|
||||||
{"a", &core.FileField{MaxSelect: 1}, `"a"`},
|
{"a", &core.FileField{MaxSelect: 1}, `"a"`},
|
||||||
{`["a"]`, &core.FileField{MaxSelect: 1}, `"a"`},
|
{`["a"]`, &core.FileField{MaxSelect: 1}, `"a"`},
|
||||||
{*f1, &core.FileField{MaxSelect: 1}, string(f1Raw)},
|
|
||||||
{f1, &core.FileField{MaxSelect: 1}, string(f1Raw)},
|
{f1, &core.FileField{MaxSelect: 1}, string(f1Raw)},
|
||||||
|
{*f1, &core.FileField{MaxSelect: 1}, string(f1Raw)},
|
||||||
|
{nilFile, &core.FileField{MaxSelect: 1}, `""`},
|
||||||
{[]string{}, &core.FileField{MaxSelect: 1}, `""`},
|
{[]string{}, &core.FileField{MaxSelect: 1}, `""`},
|
||||||
{[]string{"a", "b"}, &core.FileField{MaxSelect: 1}, `"b"`},
|
{[]string{"a", "b"}, &core.FileField{MaxSelect: 1}, `"b"`},
|
||||||
|
|
||||||
@@ -126,8 +129,9 @@ func TestFileFieldPrepareValue(t *testing.T) {
|
|||||||
{"a", &core.FileField{MaxSelect: 2}, `["a"]`},
|
{"a", &core.FileField{MaxSelect: 2}, `["a"]`},
|
||||||
{`["a"]`, &core.FileField{MaxSelect: 2}, `["a"]`},
|
{`["a"]`, &core.FileField{MaxSelect: 2}, `["a"]`},
|
||||||
{[]any{f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`},
|
{[]any{f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`},
|
||||||
{[]*filesystem.File{f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`},
|
|
||||||
{[]filesystem.File{*f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`},
|
{[]filesystem.File{*f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`},
|
||||||
|
{[]*filesystem.File{f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`},
|
||||||
|
{[]any{nilFile, f1}, &core.FileField{MaxSelect: 2}, `[` + string(f1Raw) + `]`},
|
||||||
{[]string{}, &core.FileField{MaxSelect: 2}, `[]`},
|
{[]string{}, &core.FileField{MaxSelect: 2}, `[]`},
|
||||||
{[]string{"a", "b", "c"}, &core.FileField{MaxSelect: 2}, `["a","b","c"]`},
|
{[]string{"a", "b", "c"}, &core.FileField{MaxSelect: 2}, `["a","b","c"]`},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user