1 /*
2   ==============================================================================
3 
4    This file is part of the JUCE library.
5    Copyright (c) 2020 - Raw Material Software Limited
6 
7    JUCE is an open source library subject to commercial or open-source
8    licensing.
9 
10    By using JUCE, you agree to the terms of both the JUCE 6 End-User License
11    Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
12 
13    End User License Agreement: www.juce.com/juce-6-licence
14    Privacy Policy: www.juce.com/juce-privacy-policy
15 
16    Or: You may also use this code under the terms of the GPL v3 (see
17    www.gnu.org/licenses).
18 
19    JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20    EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21    DISCLAIMED.
22 
23   ==============================================================================
24 */
25 
26 namespace juce
27 {
28 
29 #if JUCE_UNIT_TESTS
30 
31 class CachedValueTests  : public UnitTest
32 {
33 public:
CachedValueTests()34     CachedValueTests()
35         : UnitTest ("CachedValues", UnitTestCategories::values)
36     {}
37 
runTest()38     void runTest() override
39     {
40         beginTest ("default constructor");
41         {
42             CachedValue<String> cv;
43             expect (cv.isUsingDefault());
44             expect (cv.get() == String());
45         }
46 
47         beginTest ("without default value");
48         {
49             ValueTree t ("root");
50             t.setProperty ("testkey", "testvalue", nullptr);
51 
52             CachedValue<String> cv (t, "testkey", nullptr);
53 
54             expect (! cv.isUsingDefault());
55             expect (cv.get() == "testvalue");
56 
57             cv.resetToDefault();
58 
59             expect (cv.isUsingDefault());
60             expect (cv.get() == String());
61         }
62 
63         beginTest ("with default value");
64         {
65             ValueTree t ("root");
66             t.setProperty ("testkey", "testvalue", nullptr);
67 
68             CachedValue<String> cv (t, "testkey", nullptr, "defaultvalue");
69 
70             expect (! cv.isUsingDefault());
71             expect (cv.get() == "testvalue");
72 
73             cv.resetToDefault();
74 
75             expect (cv.isUsingDefault());
76             expect (cv.get() == "defaultvalue");
77         }
78 
79         beginTest ("with default value (int)");
80         {
81             ValueTree t ("root");
82             t.setProperty ("testkey", 23, nullptr);
83 
84             CachedValue<int> cv (t, "testkey", nullptr, 34);
85 
86             expect (! cv.isUsingDefault());
87             expect (cv == 23);
88             expectEquals (cv.get(), 23);
89 
90             cv.resetToDefault();
91 
92             expect (cv.isUsingDefault());
93             expect (cv == 34);
94         }
95 
96         beginTest ("with void value");
97         {
98             ValueTree t ("root");
99             t.setProperty ("testkey", var(), nullptr);
100 
101             CachedValue<String> cv (t, "testkey", nullptr, "defaultvalue");
102 
103             expect (! cv.isUsingDefault());
104             expect (cv == "");
105             expectEquals (cv.get(), String());
106         }
107 
108         beginTest ("with non-existent value");
109         {
110             ValueTree t ("root");
111 
112             CachedValue<String> cv (t, "testkey", nullptr, "defaultvalue");
113 
114             expect (cv.isUsingDefault());
115             expect (cv == "defaultvalue");
116             expect (cv.get() == "defaultvalue");
117         }
118 
119         beginTest ("with value changing");
120         {
121             ValueTree t ("root");
122             t.setProperty ("testkey", "oldvalue", nullptr);
123 
124             CachedValue<String> cv (t, "testkey", nullptr, "defaultvalue");
125             expect (cv == "oldvalue");
126 
127             t.setProperty ("testkey", "newvalue", nullptr);
128             expect (cv != "oldvalue");
129             expect (cv == "newvalue");
130         }
131 
132         beginTest ("set value");
133         {
134             ValueTree t ("root");
135             t.setProperty ("testkey", 23, nullptr);
136 
137             CachedValue<int> cv (t, "testkey", nullptr, 45);
138             cv = 34;
139 
140             expectEquals ((int) t["testkey"], 34);
141 
142             cv.resetToDefault();
143             expect (cv == 45);
144             expectEquals (cv.get(), 45);
145 
146             expect (t["testkey"] == var());
147         }
148     }
149 };
150 
151 static CachedValueTests cachedValueTests;
152 
153 #endif
154 
155 } // namespace juce
156