1// Copyright 2024 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4package optional_test
5
6import (
7 "testing"
8
9 "forgejo.org/modules/optional"
10
11 "github.com/stretchr/testify/assert"
12)
13
14func TestOption(t *testing.T) {
15 var uninitialized optional.Option[int]
16 assert.False(t, uninitialized.Has())
17 assert.Equal(t, int(0), uninitialized.Value())
18 assert.Equal(t, int(1), uninitialized.ValueOrDefault(1))
19
20 none := optional.None[int]()
21 assert.False(t, none.Has())
22 assert.Equal(t, int(0), none.Value())
23 assert.Equal(t, int(1), none.ValueOrDefault(1))
24
25 some := optional.Some(1)
26 assert.True(t, some.Has())
27 assert.Equal(t, int(1), some.Value())
28 assert.Equal(t, int(1), some.ValueOrDefault(2))
29
30 noneBool := optional.None[bool]()
31 assert.False(t, noneBool.Has())
32 assert.False(t, noneBool.Value())
33 assert.True(t, noneBool.ValueOrDefault(true))
34
35 someBool := optional.Some(true)
36 assert.True(t, someBool.Has())
37 assert.True(t, someBool.Value())
38 assert.True(t, someBool.ValueOrDefault(false))
39
40 var ptr *int
41 assert.False(t, optional.FromPtr(ptr).Has())
42
43 int1 := 1
44 opt1 := optional.FromPtr(&int1)
45 assert.True(t, opt1.Has())
46 assert.Equal(t, int(1), opt1.Value())
47
48 assert.False(t, optional.FromNonDefault("").Has())
49
50 opt2 := optional.FromNonDefault("test")
51 assert.True(t, opt2.Has())
52 assert.Equal(t, "test", opt2.Value())
53
54 assert.False(t, optional.FromNonDefault(0).Has())
55
56 opt3 := optional.FromNonDefault(1)
57 assert.True(t, opt3.Has())
58 assert.Equal(t, int(1), opt3.Value())
59}
60
61func Test_ParseBool(t *testing.T) {
62 assert.Equal(t, optional.None[bool](), optional.ParseBool(""))
63 assert.Equal(t, optional.None[bool](), optional.ParseBool("x"))
64
65 assert.Equal(t, optional.Some(false), optional.ParseBool("0"))
66 assert.Equal(t, optional.Some(false), optional.ParseBool("f"))
67 assert.Equal(t, optional.Some(false), optional.ParseBool("False"))
68
69 assert.Equal(t, optional.Some(true), optional.ParseBool("1"))
70 assert.Equal(t, optional.Some(true), optional.ParseBool("t"))
71 assert.Equal(t, optional.Some(true), optional.ParseBool("True"))
72}