diff --git a/tests/fixtures/generic/plist-alltypes-bin.json b/tests/fixtures/generic/plist-alltypes-bin.json new file mode 100644 index 00000000..bdbe76b1 --- /dev/null +++ b/tests/fixtures/generic/plist-alltypes-bin.json @@ -0,0 +1 @@ +{"aDate":1659369751,"aDict":{"aFalseValue":false,"aThirdString":"Mässig, Maß","aTrueValue":true,"anotherString":""},"aFloat":0.1,"aList":["A","B",12,32.1,[1,2,3]],"aString":"Doodah","anInt":728,"someData":"3c:62:69:6e:61:72:79:20:67:75:6e:6b:3e","someMoreData":"3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e","aDate_iso":"2022-08-01T09:02:31.181281"} diff --git a/tests/fixtures/generic/plist-alltypes-bin.plist b/tests/fixtures/generic/plist-alltypes-bin.plist new file mode 100644 index 00000000..c1ab17e8 Binary files /dev/null and b/tests/fixtures/generic/plist-alltypes-bin.plist differ diff --git a/tests/fixtures/generic/plist-alltypes.json b/tests/fixtures/generic/plist-alltypes.json new file mode 100644 index 00000000..55ef893b --- /dev/null +++ b/tests/fixtures/generic/plist-alltypes.json @@ -0,0 +1 @@ +{"aDate":1659310470,"aDict":{"aFalseValue":false,"aThirdString":"Mässig, Maß","aTrueValue":true,"anotherString":""},"aFloat":0.1,"aList":["A","B",12,32.1,[1,2,3]],"aString":"Doodah","anInt":728,"someData":"3c:62:69:6e:61:72:79:20:67:75:6e:6b:3e","someMoreData":"3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e:3c:6c:6f:74:73:20:6f:66:20:62:69:6e:61:72:79:20:67:75:6e:6b:3e","aDate_iso":"2022-07-31T16:34:30"} diff --git a/tests/fixtures/generic/plist-garageband-info.json b/tests/fixtures/generic/plist-garageband-info.json new file mode 100644 index 00000000..c80d229e --- /dev/null +++ b/tests/fixtures/generic/plist-garageband-info.json @@ -0,0 +1 @@ +{"NSAppleScriptEnabled":true,"LSMultipleInstancesProhibited":true,"CFBundleInfoDictionaryVersion":"6.0","DTPlatformVersion":"GM","CFBundleIconFile":"GarageBand.icns","CFBundleName":"GarageBand","DTSDKName":"macosx10.13internal","NSSupportsAutomaticGraphicsSwitching":true,"RevisionDate":"2018-12-03_14:10:56","UTImportedTypeDeclarations":[{"UTTypeConformsTo":["public.data","public.content"],"UTTypeIconFile":"EXS24Instrument.icns","UTTypeIdentifier":"com.apple.logic.exs","UTTypeDescription":"EXS instrument","UTTypeTagSpecification":{"com.apple.ostype":[".exs",".SBK"],"public.filename-extension":["exs","sbk"]}},{"UTTypeConformsTo":["public.data","public.content"],"UTTypeIconFile":"LogicPluginSetting.icns","UTTypeIdentifier":"com.apple.logic.pluginsetting","UTTypeDescription":"Logic Audio Plug-In Setting proprietary format","UTTypeTagSpecification":{"com.apple.ostype":"EM9S","public.filename-extension":"pst"}},{"UTTypeConformsTo":["public.data","public.audiovisual-content"],"UTTypeIdentifier":"com.apple.logic.notator","UTTypeDescription":"Notator SL Song","UTTypeTagSpecification":{"public.filename-extension":"SON"}},{"UTTypeConformsTo":["public.data","public.content","com.apple.package"],"UTTypeIdentifier":"com.apple.logic.gchdb","UTTypeDescription":"Guitar Chord Library","UTTypeTagSpecification":{"public.filename-extension":"gchdb"}},{"UTTypeConformsTo":["public.data","public.content","com.apple.package"],"UTTypeIconFile":"LogicXProject.icns","UTTypeIdentifier":"com.apple.logicx.project","UTTypeDescription":"Logic X Project","UTTypeTagSpecification":{"public.filename-extension":["logicx"]}},{"UTTypeConformsTo":["public.data","public.content"],"UTTypeIconFile":"ImpulseResponse.icns","UTTypeIdentifier":"com.apple.Logic.SpaceDesignerImpulseResponse","UTTypeDescription":"Space Designer Impulse Responses","UTTypeTagSpecification":{"com.apple.ostype":["SDIR"],"public.mime-type":[],"public.filename-extension":["sdir","SDIR"]}},{"UTTypeConformsTo":["public.data","public.content","com.apple.package"],"UTTypeIconFile":"","UTTypeIdentifier":"com.apple.logic.drummerlibrary","UTTypeDescription":"Drummer Library","UTTypeTagSpecification":{"public.filename-extension":["glibb"]}},{"UTTypeConformsTo":["public.data","public.content"],"UTTypeIconFile":"DPST.icns","UTTypeIdentifier":"com.apple.logic.dpst","UTTypeDescription":"Drummer Editor Preset","UTTypeTagSpecification":{"public.filename-extension":["dpst"]}},{"UTTypeConformsTo":["public.data"],"UTTypeIdentifier":"com.apple.mainstage.graph","UTTypeDescription":"MainStage Graph Preset","UTTypeTagSpecification":{"public.filename-extension":["mainstageGraph"]}},{"UTTypeConformsTo":["public.data","public.content"],"UTTypeIconFile":"LogicKeyCommands","UTTypeIdentifier":"com.apple.logic.keycommand","UTTypeDescription":"Logic Key Commands proprietary format","UTTypeTagSpecification":{"com.apple.ostype":"LkcS","public.filename-extension":"logikcs"}},{"UTTypeConformsTo":["com.apple.localizable-name-bundle","com.apple.package"],"UTTypeIconFile":"Patch.icns","UTTypeIdentifier":"com.apple.mainstage.patches","UTTypeDescription":"MainStage Patch","UTTypeTagSpecification":{"public.filename-extension":["patch"]}},{"UTTypeConformsTo":["public.xml","public.data"],"UTTypeIdentifier":"com.apple.audio-unit-preset","UTTypeDescription":"audio unit preset","UTTypeTagSpecification":{"public.filename-extension":["aupreset"]}},{"UTTypeConformsTo":["public.data","public.composite-content"],"UTTypeReferenceURL":"http://www.aafassociation.org/html/techinfo/index.html","UTTypeIdentifier":"org.aafassociation.advanced-authoring-format","UTTypeDescription":"Advanced Authoring Format","UTTypeTagSpecification":{"com.apple.ostype":["AAF "],"public.filename-extension":["aaf"]}},{"UTTypeConformsTo":"public.audiovisual-content","UTTypeIdentifier":"com.avid.open-media-framework","UTTypeDescription":"Open Media Framework interchange format","UTTypeTagSpecification":{"com.apple.ostype":["OMF ","OMFI"],"public.filename-extension":["omf","omfi"]}},{"UTTypeConformsTo":["public.data","public.composite-content"],"UTTypeIdentifier":"com.tascam.opentl","UTTypeDescription":"Open TL format","UTTypeTagSpecification":{"com.apple.ostype":["OPTL"],"public.filename-extension":["tl"]}},{"UTTypeConformsTo":"public.audio","UTTypeIdentifier":"public.midi-audio","UTTypeDescription":"MIDI audio","UTTypeTagSpecification":{"com.apple.ostype":["Midi"],"public.mime-type":["audio/midi","audio/x-midi"],"public.filename-extension":["midi","mid","smf","kar"]}},{"UTTypeConformsTo":["public.data","public.audiovisual-content"],"UTTypeIconFile":"LogicSong.icns","UTTypeIdentifier":"com.apple.logic-song","UTTypeDescription":"Logic Song","UTTypeTagSpecification":{"com.apple.ostype":["EM3F","sM3F"],"public.filename-extension":"lso"}},{"UTTypeConformsTo":["public.data","public.content","com.apple.package"],"UTTypeIconFile":"LogicProject.icns","UTTypeIdentifier":"com.apple.logic.project","UTTypeDescription":"Logic Project","UTTypeTagSpecification":{"com.apple.ostype":"????","public.filename-extension":"logic"}},{"UTTypeConformsTo":["public.data","public.content"],"UTTypeIconFile":"LogicCST.icns","UTTypeIdentifier":"com.apple.logic.channelstripsetting","UTTypeDescription":"Logic Audio Channel Strip Setting proprietary format","UTTypeTagSpecification":{"com.apple.ostype":".CST","public.filename-extension":"cst"}}],"NSPrincipalClass":"CLgApplication","LSApplicationCategoryType":"public.app-category.music","CFBundleDisplayName":"GarageBand","CFBundleShortName":"GarageBand","CFBundleDocumentTypes":[{"CFBundleTypeExtensions":["band","gbProj"],"CFBundleTypeOSTypes":["EMP1"],"LSTypeIsPackage":true,"NSPersistentStoreTypeKey":"Binary","CFBundleTypeName":"GarageBand Project","CFBundleTypeIconFile":"GarageBandDocument","LSItemContentTypes":["com.apple.garageband.project"],"CFBundleTypeRole":"Editor","NSDocumentClass":"CLgSongDocument"},{"CFBundleTypeExtensions":["mwand"],"LSTypeIsPackage":true,"NSPersistentStoreTypeKey":"Binary","CFBundleTypeName":"GarageBandMagicMentorTemplate","CFBundleTypeIconFile":"GarageBandDocument.icns","LSItemContentTypes":["com.apple.garageband.template.magicmentor"],"CFBundleTypeRole":"Editor","NSDocumentClass":"DfDocument"},{"CFBundleTypeExtensions":["patch"],"LSTypeIsPackage":true,"CFBundleTypeName":"Logic X Patch","CFBundleTypeIconFile":"Patch.icns","LSItemContentTypes":["com.apple.mainstage.patches"],"CFBundleTypeRole":"Viewer","NSDocumentClass":"CLgSongDocument"},{"CFBundleTypeExtensions":["mid"],"CFBundleTypeOSTypes":["Midi"],"LSTypeIsPackage":false,"CFBundleTypeName":"Standard MIDI File","CFBundleTypeIconFile":"StandardMIDIFile.icns","LSItemContentTypes":["public.midi-audio"],"CFBundleTypeRole":"Viewer","NSDocumentClass":"CLgSongDocument"},{"CFBundleTypeExtensions":["aif","aiff"],"CFBundleTypeOSTypes":["AIFF"],"LSTypeIsPackage":false,"CFBundleTypeName":"AIFF Audio file","CFBundleTypeIconFile":"LogicAudioFileAIFF.icns","LSItemContentTypes":["public.aiff-audio"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeExtensions":["caf"],"LSTypeIsPackage":false,"NSPersistentStoreTypeKey":"Binary","CFBundleTypeName":"CAF Audio file","CFBundleTypeIconFile":"LogicAudioFileCAF.icns","LSItemContentTypes":["com.apple.coreaudio-format"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeExtensions":["sd2"],"CFBundleTypeOSTypes":["Sd2f"],"LSTypeIsPackage":false,"CFBundleTypeName":"SoundDesigner II audio file","CFBundleTypeIconFile":"LogicAudioFileSDII.icns","LSItemContentTypes":["com.digidesign.sd2-audio"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeExtensions":["wav","wave"],"CFBundleTypeOSTypes":["WAVE"],"LSTypeIsPackage":false,"CFBundleTypeName":"Wave file","CFBundleTypeIconFile":"LogicAudioFileWAV.icns","LSItemContentTypes":["com.microsoft.waveform-audio"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeExtensions":["pst"],"CFBundleTypeOSTypes":["PSET","EM9S"],"LSTypeIsPackage":false,"CFBundleTypeName":"Logic Plug-in settings file","CFBundleTypeIconFile":"LogicPluginSetting.icns","LSItemContentTypes":["com.apple.logic.pluginsetting"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeExtensions":["cst"],"LSTypeIsPackage":false,"NSPersistentStoreTypeKey":"Binary","CFBundleTypeName":"Logic Channel Strip settings file","CFBundleTypeIconFile":"LogicCST.icns","LSItemContentTypes":["com.apple.logic.channelstripsetting"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeOSTypes":["LABL"],"LSTypeIsPackage":false,"CFBundleTypeName":"Logic I/O label file","CFBundleTypeIconFile":"LogicIOLabel.icns","LSItemContentTypes":["com.apple.logic.iolabels"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeExtensions":["sdir","SDIR"],"CFBundleTypeOSTypes":["SDIR","AIFF"],"LSTypeIsPackage":false,"CFBundleTypeName":"Space Designer Impulse Response","CFBundleTypeIconFile":"ImpulseResponse.icns","LSItemContentTypes":["com.apple.Logic.SpaceDesignerImpulseResponse"],"CFBundleTypeRole":"None"},{"CFBundleTypeExtensions":["exs","SBK"],"CFBundleTypeOSTypes":[".exs",".SBK"],"LSTypeIsPackage":false,"CFBundleTypeName":"EXS24 instrument file","CFBundleTypeIconFile":"EXS24Instrument.icns","LSItemContentTypes":["com.apple.logic.exs"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeExtensions":["logikcs"],"LSTypeIsPackage":false,"NSPersistentStoreTypeKey":"XML","CFBundleTypeName":"Logic Key Commands","CFBundleTypeIconFile":"LogicKeyCommands.icns","LSItemContentTypes":["com.apple.logic.keycommand"],"CFBundleTypeRole":"None"},{"CFBundleTypeExtensions":["gchdb"],"LSTypeIsPackage":true,"NSPersistentStoreTypeKey":"Binary","CFBundleTypeName":"Guitar Chord Library","LSItemContentTypes":["com.apple.logic.gchdb"],"CFBundleTypeRole":"Editor"},{"CFBundleTypeExtensions":["dpst"],"CFBundleTypeName":"Drummer Editor Preset","CFBundleTypeIconFile":"DPST.icns","LSItemContentTypes":["com.apple.logic.dpst"],"CFBundleTypeRole":"None"}],"DTSDKBuild":"17D47","MADefaultResourceBundleID":"com.apple.music.apps.MAResources","CFBundleShortVersionString":"10.3.2","CFBundleSupportedPlatforms":["MacOSX"],"BuildMachineOSBuild":"16B2657","BugComponent":"GarageBand MacOS | New Bugs","CFBundlePackageType":"APPL","DTXcodeBuild":"9C40b","CFBundleDevelopmentRegion":"English","DTPlatformBuild":"9C40b","CFBundleVersion":"4980.96","MAApplicationResourceBundleID":"com.apple.music.apps.MAResourcesGB","ATSApplicationFontsPath":"../Frameworks/MAResources.framework/Resources","NSUbiquitousContainers":{"F3LWYJ7GM7.com.apple.garageband10":{"NSUbiquitousContainerIsDocumentScopePublic":true,"NSUbiquitousContainerSupportedFolderLevels":"One","NSUbiquitousContainerName":"GarageBand for macOS"},"F3LWYJ7GM7.com.apple.mobilegarageband":{"NSUbiquitousContainerIsDocumentScopePublic":true,"NSUbiquitousContainerSupportedFolderLevels":"One","NSUbiquitousContainerName":"GarageBand for iOS"},"F3LWYJ7GM7.com.apple.musicmemos.ideas":{"NSUbiquitousContainerIsDocumentScopePublic":true,"NSUbiquitousContainerSupportedFolderLevels":"One","NSUbiquitousContainerName":"Music Memos"}},"CFBundleGetInfoString":"GarageBand 10.3.2, Copyright © 2004–2018 Apple Inc. All Rights Reserved","RevisionTrain":"MAManchester","UTExportedTypeDeclarations":[{"UTTypeConformsTo":["com.apple.package","public.audiovisual-content"],"UTTypeIconFile":"GarageBandDocument","UTTypeIdentifier":"com.apple.garageband.project","UTTypeDescription":"GarageBand Project","UTTypeReferenceURL":"http://www.apple.com/ilife/garageband/","UTTypeTagSpecification":{"public.filename-extension":["band","gbProj"]}},{"UTTypeConformsTo":["com.apple.package","public.audiovisual-content"],"UTTypeIconFile":"GarageBandDocument.icns","UTTypeIdentifier":"com.apple.garageband.template.magicmentor","UTTypeDescription":"MagicMentor GarageBand Template","UTTypeReferenceURL":"http://www.apple.com/ilife/garageband/","UTTypeTagSpecification":{"public.filename-extension":["mwand"]}}],"OSAScriptingDefinition":"GarageBandSuite.sdef","NSDisablePersistence":true,"NSMainNibFile":"MainMenu","NSMicrophoneUsageDescription":"To enable audio input for recording in GarageBand, click OK (recommended). You can also enable audio input later in System Preferences > Security & Privacy.","CFBundleIdentifier":"com.apple.garageband10","DTXcode":"0920","CFBundleHelpBookName":"com.apple.garageband10.help","CFBundleHelpBookFolder":"garageband.help","WhatsNewPanelVersion":3,"CFBundleExecutable":"GarageBand","LSMinimumSystemVersion":"10.12","CFBundleSignature":"band","RevisionBranch":"94d3b910e514cb711d268bc5d953046c3bb629e70a5564a403b3bde53d2a75b7","RevisionInfo":"b5a3763eeeb9cd03d024bdb84b9d5975b70318b3","DTCompiler":"com.apple.compilers.llvm.clang.1_0"} diff --git a/tests/fixtures/generic/plist-safari-info.json b/tests/fixtures/generic/plist-safari-info.json new file mode 100644 index 00000000..d78d0e09 --- /dev/null +++ b/tests/fixtures/generic/plist-safari-info.json @@ -0,0 +1 @@ +{"ASWebAuthenticationSessionWebBrowserSupportCapabilities":{"EphemeralBrowserSessionIsSupported":true,"IsSupported":true},"Application-Group":["dot-mac","InternetAccounts"],"BuildMachineOSBuild":"20A241133","CFBundleDevelopmentRegion":"English","CFBundleDisplayName":"Safari","CFBundleDocumentTypes":[{"CFBundleTypeExtensions":["css"],"CFBundleTypeIconFile":"css.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["text/css"],"CFBundleTypeName":"CSS style sheet","CFBundleTypeRole":"Viewer","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["pdf"],"CFBundleTypeIconFile":"pdf.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["application/pdf"],"CFBundleTypeName":"PDF document","CFBundleTypeRole":"Viewer","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["webarchive"],"CFBundleTypeIconFile":"webarchive.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["application/x-webarchive"],"CFBundleTypeName":"Web archive","CFBundleTypeRole":"Viewer","ICExtension":"ARCHIVE","LSHandlerRank":"Default","LSIsAppleDefaultForType":true,"NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["webbookmark"],"CFBundleTypeIconFile":"webbookmark.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeName":"Safari bookmark","CFBundleTypeRole":"Viewer","LSHandlerRank":"Default","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["webhistory"],"CFBundleTypeIconFile":"webhistory.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeName":"Safari history item","CFBundleTypeRole":"Viewer","LSHandlerRank":"Default","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["webloc"],"CFBundleTypeIconFile":"webloc.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeName":"Web internet location","CFBundleTypeOSTypes":["ilht"],"CFBundleTypeRole":"Viewer","LSHandlerRank":"Default","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["download"],"CFBundleTypeIconFile":"download10.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeName":"Safari download","CFBundleTypeRole":"Editor","LSHandlerRank":"Default","LSTypeIsPackage":true,"NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["safariextz"],"CFBundleTypeIconFile":"safariextz.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["application/x-safari-extension"],"CFBundleTypeName":"Safari extension","CFBundleTypeRole":"Viewer","LSHandlerRank":"Owner","LSTypeIsPackage":false,"NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["gif"],"CFBundleTypeIconFile":"gif.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["image/gif"],"CFBundleTypeName":"GIF image","CFBundleTypeOSTypes":["GIFf"],"CFBundleTypeRole":"Viewer","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["html","htm","shtml","jhtml"],"CFBundleTypeIconFile":"html.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["text/html"],"CFBundleTypeName":"HTML document","CFBundleTypeOSTypes":["HTML"],"CFBundleTypeRole":"Viewer","ICExtension":"HTML","LSHandlerRank":"Default","LSIsAppleDefaultForType":true,"NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["js"],"CFBundleTypeIconFile":"js.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["application/x-javascript"],"CFBundleTypeName":"JavaScript script","CFBundleTypeRole":"Viewer","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["jpg","jpeg"],"CFBundleTypeIconFile":"jpeg.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["image/jpeg"],"CFBundleTypeName":"JPEG image","CFBundleTypeOSTypes":["JPEG"],"CFBundleTypeRole":"Viewer","ICExtension":"JPEG","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["jp2"],"CFBundleTypeIconFile":"jp2.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["image/jp2"],"CFBundleTypeName":"JPEG 2000 image","CFBundleTypeOSTypes":["jp2 "],"CFBundleTypeRole":"Viewer","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["txt","text"],"CFBundleTypeIconFile":"txt.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["text/plain"],"CFBundleTypeName":"Plain text document","CFBundleTypeOSTypes":["TEXT"],"CFBundleTypeRole":"Viewer","ICExtension":"TXT","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["png"],"CFBundleTypeIconFile":"png.icns","CFBundleTypeMIMETypes":["image/png"],"CFBundleTypeName":"PNG image","CFBundleTypeOSTypes":["PNGf"],"CFBundleTypeRole":"Viewer","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["tiff","tif"],"CFBundleTypeIconFile":"tiff.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["image/tiff"],"CFBundleTypeName":"TIFF image","CFBundleTypeOSTypes":["TIFF"],"CFBundleTypeRole":"Viewer","ICExtension":"TIFF","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["url"],"CFBundleTypeIconFile":"url.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeName":"Web site location","CFBundleTypeOSTypes":["LINK"],"CFBundleTypeRole":"Viewer","LSHandlerRank":"Default","LSIsAppleDefaultForType":true,"NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["ico"],"CFBundleTypeIconFile":"ico.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["image/x-icon"],"CFBundleTypeName":"Windows icon image","CFBundleTypeOSTypes":["ICO "],"CFBundleTypeRole":"Viewer","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["xhtml","xht","xhtm","xht"],"CFBundleTypeIconFile":"xhtml.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["application/xhtml+xml"],"CFBundleTypeName":"XHTML document","CFBundleTypeRole":"Viewer","ICExtension":"XHTML","LSHandlerRank":"Default","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["xml","xbl","xsl","xslt"],"CFBundleTypeIconFile":"xml.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["application/xml","text/xml"],"CFBundleTypeName":"XML document","CFBundleTypeRole":"Viewer","ICExtension":"XML","LSHandlerRank":"Default","NSDocumentClass":"BrowserDocument"},{"CFBundleTypeExtensions":["svg"],"CFBundleTypeIconFile":"svg.icns","CFBundleTypeIconSystemGenerated":"YES","CFBundleTypeMIMETypes":["image/svg+xml"],"CFBundleTypeName":"SVG document","CFBundleTypeRole":"Viewer","LSHandlerRank":"Alternate","NSDocumentClass":"BrowserDocument"}],"CFBundleExecutable":"Safari","CFBundleGetInfoString":"15.6, Copyright © 2003-2022 Apple Inc.","CFBundleHelpBookFolder":"Safari.help","CFBundleHelpBookName":"com.apple.Safari.help","CFBundleIconFile":"AppIcon","CFBundleIconName":"AppIcon","CFBundleIdentifier":"com.apple.Safari","CFBundleInfoDictionaryVersion":"6.0","CFBundleName":"Safari","CFBundlePackageType":"APPL","CFBundleShortVersionString":"15.6","CFBundleSignature":"sfri","CFBundleSupportedPlatforms":["MacOSX"],"CFBundleURLTypes":[{"CFBundleURLName":"Web site URL","CFBundleURLSchemes":["http","https"],"LSHandlerRank":"Default","LSIsAppleDefaultForScheme":true},{"CFBundleURLName":"Local file URL","CFBundleURLSchemes":["file"],"LSHandlerRank":"Default"},{"CFBundleURLSchemes":["prefs"],"LSHandlerRank":"None"}],"CFBundleVersion":"17613.3.9.1.5","DTCompiler":"com.apple.compilers.llvm.clang.1_0","DTPlatformBuild":"21G66","DTPlatformName":"macosx","DTPlatformVersion":"12.5","DTSDKBuild":"21G66","DTSDKName":"macosx12.5.internal","DTXcode":"1330","DTXcodeBuild":"13E6049a","HPDHelpProjectIdentifier":"safari","LSApplicationCategoryType":"public.app-category.productivity","LSFileQuarantineEnabled":true,"LSMinimumSystemVersion":"12.5.0","NSAppleScriptEnabled":"Yes","NSExtensionSDK":{"com.apple.Safari.web-extension":{"NSExtension":{"NSExtensionAttributes":{"NSExtensionPointName":"com.apple.Safari.web-extension","NSExtensionPointVersion":"1.0"},"NSExtensionHostEntitlement":"com.apple.private.can-load-any-content-blocker","NSExtensionProtocol":"NSObject","PrincipalClass":"NSObject","Subsystems":["NSSharingService_Subsystem"]},"XPCService":{"JoinExistingSession":true,"RunLoopType":"NSRunLoop","ServiceType":"Application","_AdditionalSubServices":{"apple-extension-service":true}}}},"NSLocationUsageDescription":"Websites you visit may request your location.","NSMainNibFile":"MainMenu","NSPrincipalClass":"BrowserApplication","NSServices":[{"NSKeyEquivalent":{"default":"L"},"NSMenuItem":{"default":"Search With %WebSearchProvider@"},"NSMessage":"searchWithWebSearchProvider","NSPortName":"Safari","NSSendTypes":["public.utf8-plain-text"]},{"NSMenuItem":{"default":"Add to Reading List"},"NSMessage":"addToReadingList","NSPortName":"Safari","NSRequiredContext":[{"NSTextContent":"URL"},{"NSLinkSchemes":["http","https"]}],"NSSendTypes":["public.rtf","public.utf8-plain-text"]}],"NSSpeechRecognitionUsageDescription":"Websites you visit may access speech recognition.","NSSupportsAutomaticTermination":true,"NSSupportsSuddenTermination":false,"NSUserActivityTypes":["NSUserActivityTypeBrowsingWeb"],"OSAScriptingDefinition":"Safari.sdef","UTExportedTypeDeclarations":[{"UTTypeConformsTo":["public.data"],"UTTypeDescription":"Safari bookmark","UTTypeIdentifier":"com.apple.safari.bookmark","UTTypeTagSpecification":{"public.filename-extension":["webbookmark"]}},{"UTTypeConformsTo":["public.data"],"UTTypeDescription":"Safari extension","UTTypeIdentifier":"com.apple.safari.extension","UTTypeTagSpecification":{"public.filename-extension":["safariextz"]}},{"UTTypeConformsTo":["public.data"],"UTTypeDescription":"Safari history item","UTTypeIdentifier":"com.apple.safari.history","UTTypeTagSpecification":{"public.filename-extension":["webhistory"]}}]} diff --git a/tests/test_plist.py b/tests/test_plist.py new file mode 100644 index 00000000..432be1d0 --- /dev/null +++ b/tests/test_plist.py @@ -0,0 +1,75 @@ +import os +import unittest +import json +import jc.parsers.plist + +THIS_DIR = os.path.dirname(os.path.abspath(__file__)) + + +class MyTests(unittest.TestCase): + + def setUp(self): + # input + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/plist-garageband-info.plist'), 'rb') as f: + self.generic_garageband = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/plist-safari-info.plist'), 'r', encoding='utf-8') as f: + self.generic_safari = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/plist-alltypes.plist'), 'r', encoding='utf-8') as f: + self.generic_alltypes = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/plist-alltypes-bin.plist'), 'rb') as f: + self.generic_alltypes_bin = f.read() + + # output + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/plist-garageband-info.json'), 'r', encoding='utf-8') as f: + self.generic_garageband_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/plist-safari-info.json'), 'r', encoding='utf-8') as f: + self.generic_safari_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/plist-alltypes.json'), 'r', encoding='utf-8') as f: + self.generic_alltypes_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/plist-alltypes-bin.json'), 'r', encoding='utf-8') as f: + self.generic_alltypes_bin_json = json.loads(f.read()) + + + def test_plist_nodata(self): + """ + Test 'plist' with no data + """ + self.assertEqual(jc.parsers.plist.parse('', quiet=True), {}) + + + def test_plist_binary(self): + """ + Test binary plist file (garage band) + """ + self.assertEqual(jc.parsers.plist.parse(self.generic_garageband, quiet=True), self.generic_garageband_json) + + + def test_plist_xml(self): + """ + Test XML plist file (safari) + """ + self.assertEqual(jc.parsers.plist.parse(self.generic_safari, quiet=True), self.generic_safari_json) + + + def test_plist_xml_alltypes(self): + """ + Test XML plist file with all object types + """ + self.assertEqual(jc.parsers.plist.parse(self.generic_alltypes, quiet=True), self.generic_alltypes_json) + + + def test_plist_bin_alltypes(self): + """ + Test binary plist file with all object types + """ + self.assertEqual(jc.parsers.plist.parse(self.generic_alltypes_bin, quiet=True), self.generic_alltypes_bin_json) + + +if __name__ == '__main__': + unittest.main()