diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index ede822f0de..e2fa131de4 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -1086,6 +1086,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_Network_mac.mm" "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" + "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac_test.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" @@ -3154,6 +3155,7 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_Network_mac.mm" "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" + "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac_test.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters index 9a235c7283..1f03591db4 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters @@ -2017,6 +2017,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index e755256d7a..d30cd74271 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -2017,6 +2017,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index c0383e7013..7e9ce3f1df 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -2017,6 +2017,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index 1f929bf994..277b4502e9 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -962,6 +962,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_Network_mac.mm" "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" + "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac_test.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" @@ -2730,6 +2731,7 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_Network_mac.mm" "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" + "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac_test.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters index c4870e885a..76c06ba59b 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters @@ -1726,6 +1726,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index f862d52a88..da78ba0dcf 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -995,6 +995,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_Network_mac.mm" "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" + "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac_test.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" @@ -2916,6 +2917,7 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_Network_mac.mm" "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" + "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac_test.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters index 4328bd6980..ff9e4dd18e 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters @@ -1801,6 +1801,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index 51192816ed..77a4d0494d 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -1801,6 +1801,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index 374d5b4ee6..da5051c2c9 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -1801,6 +1801,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters index 9c939bbb83..fab1061206 100644 --- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters +++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters @@ -247,6 +247,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index ddcb2c4cac..2295ce27ed 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -966,6 +966,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_Network_mac.mm" "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" + "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac_test.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" @@ -2814,6 +2815,7 @@ set_source_files_properties( "../../../../../modules/juce_core/native/juce_Network_mac.mm" "../../../../../modules/juce_core/native/juce_Network_windows.cpp" "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac.h" + "../../../../../modules/juce_core/native/juce_ObjCHelpers_mac_test.mm" "../../../../../modules/juce_core/native/juce_PlatformTimer_generic.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimer_windows.cpp" "../../../../../modules/juce_core/native/juce_PlatformTimerListener.h" diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters index 8efe2dcdbd..8d1e2131d2 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters @@ -1756,6 +1756,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters index 66c254e7a2..00f60d067e 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters @@ -724,6 +724,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters index 96316102a1..dba37976d9 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters @@ -724,6 +724,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters index 879f8c7344..8466cd4661 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters @@ -724,6 +724,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters index 02381aa7fb..8cb0a7dec9 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1813,6 +1813,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters index ecee283b15..235f735e4e 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1813,6 +1813,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters index a5a3234801..c8f89ebdcd 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1813,6 +1813,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters index a0e2a5a947..726c48a51b 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters @@ -1753,6 +1753,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp index c187355fd7..7bbe6ba697 100644 --- a/modules/juce_core/juce_core.cpp +++ b/modules/juce_core/juce_core.cpp @@ -283,6 +283,9 @@ #include "misc/juce_EnumHelpers_test.cpp" #include "containers/juce_FixedSizeFunction_test.cpp" #include "javascript/juce_JSONSerialisation_test.cpp" + #if JUCE_MAC || JUCE_IOS + #include "native/juce_ObjCHelpers_mac_test.mm" + #endif #endif //============================================================================== diff --git a/modules/juce_core/native/juce_ObjCHelpers_mac.h b/modules/juce_core/native/juce_ObjCHelpers_mac.h index e622b836f7..0b56b71340 100644 --- a/modules/juce_core/native/juce_ObjCHelpers_mac.h +++ b/modules/juce_core/native/juce_ObjCHelpers_mac.h @@ -76,127 +76,62 @@ inline NSURL* createNSURLFromFile (const File& f) inline NSArray* createNSArrayFromStringArray (const StringArray& strings) { - auto array = [[NSMutableArray alloc] init]; + auto array = [[NSMutableArray alloc] initWithCapacity: (NSUInteger) strings.size()]; - for (auto string: strings) - [array addObject:juceStringToNS (string)]; + for (const auto& string: strings) + [array addObject: juceStringToNS (string)]; return [array autorelease]; } -inline NSArray* varArrayToNSArray (const var& varToParse); +inline NSData* varToJsonData (const var& varToParse) +{ + return [juceStringToNS (JSON::toString (varToParse)) dataUsingEncoding: NSUTF8StringEncoding]; +} + +inline var jsonDataToVar (NSData* jsonData) +{ + auto* jsonString = [[NSString alloc] initWithData: jsonData + encoding: NSUTF8StringEncoding]; + + jassert (jsonString != nullptr); + return JSON::parse (nsStringToJuce ([jsonString autorelease])); +} inline NSDictionary* varObjectToNSDictionary (const var& varToParse) { - auto dictionary = [NSMutableDictionary dictionary]; + jassert (varToParse.isObject()); - if (varToParse.isObject()) - { - auto* dynamicObject = varToParse.getDynamicObject(); + if (! varToParse.isObject()) + return nullptr; - auto& properties = dynamicObject->getProperties(); + NSError* error { nullptr }; + NSDictionary* dictionary = [NSJSONSerialization JSONObjectWithData: varToJsonData (varToParse) + options: NSJSONReadingMutableContainers + error: &error]; - for (int i = 0; i < properties.size(); ++i) - { - auto* keyString = juceStringToNS (properties.getName (i).toString()); - - const var& valueVar = properties.getValueAt (i); - - if (valueVar.isObject()) - { - auto* valueDictionary = varObjectToNSDictionary (valueVar); - - [dictionary setObject: valueDictionary forKey: keyString]; - } - else if (valueVar.isArray()) - { - auto* valueArray = varArrayToNSArray (valueVar); - - [dictionary setObject: valueArray forKey: keyString]; - } - else - { - auto* valueString = juceStringToNS (valueVar.toString()); - - [dictionary setObject: valueString forKey: keyString]; - } - } - } + jassert (error == nullptr); + jassert (dictionary != nullptr); return dictionary; } -inline NSArray* varArrayToNSArray (const var& varToParse) +inline NSData* jsonObjectToData (const NSObject* jsonObject) { - jassert (varToParse.isArray()); + NSError* error { nullptr }; + auto* jsonData = [NSJSONSerialization dataWithJSONObject: jsonObject + options: 0 + error: &error]; - if (! varToParse.isArray()) - return nil; + jassert (error == nullptr); + jassert (jsonData != nullptr); - const auto* varArray = varToParse.getArray(); - - auto array = [NSMutableArray arrayWithCapacity: (NSUInteger) varArray->size()]; - - for (const auto& aVar : *varArray) - { - if (aVar.isObject()) - { - auto* valueDictionary = varObjectToNSDictionary (aVar); - - [array addObject: valueDictionary]; - } - else if (aVar.isArray()) - { - auto* valueArray = varArrayToNSArray (aVar); - - [array addObject: valueArray]; - } - else - { - auto* valueString = juceStringToNS (aVar.toString()); - - [array addObject: valueString]; - } - } - - return array; + return jsonData; } -var nsObjectToVar (NSObject* array); - inline var nsDictionaryToVar (NSDictionary* dictionary) { - DynamicObject::Ptr dynamicObject (new DynamicObject()); - - for (NSString* key in dictionary) - dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar ([dictionary objectForKey: key])); - - return var (dynamicObject.get()); -} - -inline var nsArrayToVar (NSArray* array) -{ - Array resultArray; - - for (id value in array) - resultArray.add (nsObjectToVar (value)); - - return var (resultArray); -} - -inline var nsObjectToVar (NSObject* obj) -{ - if ([obj isKindOfClass: [NSString class]]) return nsStringToJuce ((NSString*) obj); - else if ([obj isKindOfClass: [NSNumber class]]) return nsStringToJuce ([(NSNumber*) obj stringValue]); - else if ([obj isKindOfClass: [NSDictionary class]]) return nsDictionaryToVar ((NSDictionary*) obj); - else if ([obj isKindOfClass: [NSArray class]]) return nsArrayToVar ((NSArray*) obj); - else - { - // Unsupported yet, add here! - jassertfalse; - } - - return {}; + return jsonDataToVar (jsonObjectToData (dictionary)); } #if JUCE_MAC diff --git a/modules/juce_core/native/juce_ObjCHelpers_mac_test.mm b/modules/juce_core/native/juce_ObjCHelpers_mac_test.mm new file mode 100644 index 0000000000..9b55cabc26 --- /dev/null +++ b/modules/juce_core/native/juce_ObjCHelpers_mac_test.mm @@ -0,0 +1,70 @@ +namespace juce { + +class ObjCHelpersTest final : public UnitTest { +public: + ObjCHelpersTest() : UnitTest{"ObjCHelpers", UnitTestCategories::native} {} + + void runTest() final { + beginTest("Range"); + { + constexpr auto start = 10; + constexpr auto length = 20; + + const auto juceRange = Range::withStartAndLength(start, length); + const auto nsRange = NSMakeRange(start, length); + + expect(nsRangeToJuce(nsRange) == juceRange); + expect(NSEqualRanges(nsRange, juceRangeToNS(juceRange))); + } + + beginTest("String"); + { + String juceString{"Hello world!"}; + NSString *nsString{@"Hello world!"}; + + expect(nsStringToJuce(nsString) == juceString); + expect([nsString isEqualToString:juceStringToNS(juceString)]); + expect([nsString isEqualToString:nsStringLiteral("Hello world!")]); + } + + beginTest("StringArray"); + { + const StringArray stringArray{"Hello world!", "this", "is", "a", "test"}; + NSArray *nsArray { @[ @"Hello world!", @"this", @"is", @"a", @"test" ] }; + + expect( + [nsArray isEqualToArray:createNSArrayFromStringArray(stringArray)]); + } + + beginTest("Dictionary"); + { + DynamicObject::Ptr data{new DynamicObject()}; + data->setProperty("integer", 1); + data->setProperty("double", 2.3); + data->setProperty("boolean", true); + data->setProperty("string", "Hello world!"); + + Array array{45, 67.8, true, "Hello array!"}; + data->setProperty("array", array); + + auto *nsDictionary = varObjectToNSDictionary(data.get()); + auto clone = nsDictionaryToVar(nsDictionary); + + expect(clone.getProperty("integer", {}).isInt()); + expect(clone.getProperty("double", {}).isDouble()); + expect(clone.getProperty("boolean", {}).isBool()); + expect(clone.getProperty("string", {}).isString()); + expect(clone.getProperty("array", {}).isArray()); + + expect(clone.getProperty("integer", {}) == var{1}); + expect(clone.getProperty("double", {}) == var{2.3}); + expect(clone.getProperty("boolean", {}) == var{true}); + expect(clone.getProperty("string", {}) == var{"Hello world!"}); + expect(clone.getProperty("array", {}) == array); + } + } +}; + +static ObjCHelpersTest objCHelpersTest; + +} // namespace juce diff --git a/modules/juce_core/unit_tests/juce_UnitTestCategories.h b/modules/juce_core/unit_tests/juce_UnitTestCategories.h index c4fa4b5dfc..267991f486 100644 --- a/modules/juce_core/unit_tests/juce_UnitTestCategories.h +++ b/modules/juce_core/unit_tests/juce_UnitTestCategories.h @@ -40,6 +40,7 @@ namespace UnitTestCategories static const String json { "JSON" }; static const String maths { "Maths" }; static const String midi { "MIDI" }; + static const String native { "Native" }; static const String networking { "Networking" }; static const String osc { "OSC" }; static const String smoothedValues { "SmoothedValues" };