// Copyright © 2015 Abhishek Banthia import XCTest @testable import Clocker class ThemerTests: XCTestCase { @available(macOS 10.14, *) func testSettingTheme() { // Set to some random number should set to 0 let subject = Themer(index: 124) XCTAssertEqual(NSAppearance(named: .aqua), NSAppearance(named: .aqua)) // Set the same theme; this should return early subject.set(theme: 0) // Set the theme to dark theme subject.set(theme: 1) let expectedApperance = NSAppearance(named: .darkAqua) XCTAssertEqual(expectedApperance, NSApp.appearance) } func testLightTheme() throws { let subject = Themer(index: 0) // 0 is for light theme let expectedSliderKnobColor = NSColor(deviceRed: 255.0, green: 255.0, blue: 255, alpha: 0.9) let expectedSliderRightColor = NSColor.gray let expectedBackgroundColor = NSColor.white let expectedTextColor = NSColor.black let expectedTextBackgroundColor = NSColor(deviceRed: 241.0 / 255.0, green: 241.0 / 255.0, blue: 241.0 / 255.0, alpha: 1.0) let expectedShutdownImageName = "ellipsis.circle" let expectedPreferenceImageName = "plus" let expectedPinImageName = "macwindow.on.rectangle" let expectedSunriseImageName = "sunrise.fill" let expectedSunsetImageName = "sunset.fill" let expectedRemoveImageName = "xmark" let expectedExtraOptionsImage = "Extra" let expectedMenubarOnboardingImage = "Light Menubar" let expectedExtraOptionsHighlightedImage = "ExtraHighlighted" let expectedSharingImage = "square.and.arrow.up.on.square.fill" let expectedCurrentLocationImage = "location.fill" let expectedPopoverApperarance = NSAppearance(named: NSAppearance.Name.vibrantLight)! let expectedAddImage = "plus" let expectedAddImageHighlighted = "Add Highlighted" let expectedPrivacyTabImage = "lock" let expectedAppearanceTabImage = "eye" let expectedCalendarTabImage = "calendar" let expectedGeneralTabImage = "gearshape" let expectedAboutTabImage = "info.circle" let expectedVideoCallImage = "video.circle.fill" let expectedFilledTrashImage = "trash.fill" let expectedBackwardsImage = "gobackward.15" let expectedForwardsImage = "goforward.15" let expectedResetSliderImage = "xmark.circle.fill" XCTAssertEqual(subject.sliderKnobColor(), expectedSliderKnobColor) XCTAssertEqual(subject.sliderRightColor(), expectedSliderRightColor) XCTAssertEqual(subject.mainBackgroundColor(), expectedBackgroundColor) XCTAssertEqual(subject.mainTextColor(), expectedTextColor) XCTAssertEqual(subject.textBackgroundColor(), expectedTextBackgroundColor) XCTAssertEqual(subject.shutdownImage().accessibilityDescription, expectedShutdownImageName) XCTAssertEqual(subject.preferenceImage().accessibilityDescription, expectedPreferenceImageName) XCTAssertEqual(subject.pinImage().accessibilityDescription, expectedPinImageName) XCTAssertEqual(subject.sunriseImage().accessibilityDescription, expectedSunriseImageName) XCTAssertEqual(subject.sunsetImage().accessibilityDescription, expectedSunsetImageName) XCTAssertEqual(subject.removeImage().accessibilityDescription, expectedRemoveImageName) XCTAssertEqual(subject.extraOptionsImage().name(), expectedExtraOptionsImage) XCTAssertEqual(subject.menubarOnboardingImage().name(), expectedMenubarOnboardingImage) XCTAssertEqual(subject.extraOptionsHighlightedImage().name(), expectedExtraOptionsHighlightedImage) XCTAssertEqual(subject.sharingImage().accessibilityDescription, expectedSharingImage) XCTAssertEqual(subject.currentLocationImage().accessibilityDescription, expectedCurrentLocationImage) XCTAssertEqual(subject.popoverAppearance(), expectedPopoverApperarance) XCTAssertEqual(subject.addImage().accessibilityDescription, expectedAddImage) XCTAssertEqual(subject.addImageHighlighted().name(), expectedAddImageHighlighted) XCTAssertEqual(subject.privacyTabImage().accessibilityDescription, expectedPrivacyTabImage) XCTAssertEqual(subject.appearanceTabImage().accessibilityDescription, expectedAppearanceTabImage) XCTAssertEqual(subject.calendarTabImage().accessibilityDescription, expectedCalendarTabImage) XCTAssertEqual(subject.generalTabImage()?.accessibilityDescription, expectedGeneralTabImage) XCTAssertEqual(subject.aboutTabImage()?.accessibilityDescription, expectedAboutTabImage) XCTAssertEqual(subject.videoCallImage()?.accessibilityDescription, expectedVideoCallImage) XCTAssertEqual(subject.filledTrashImage()?.accessibilityDescription, expectedFilledTrashImage) XCTAssertEqual(subject.goBackwardsImage()?.accessibilityDescription, expectedBackwardsImage) XCTAssertEqual(subject.goForwardsImage()?.accessibilityDescription, expectedForwardsImage) XCTAssertEqual(subject.resetModernSliderImage()?.accessibilityDescription, expectedResetSliderImage) } func testDarkTheme() throws { let subject = Themer(index: 1) // 1 is for dark theme let expectedSliderKnobColor = NSColor(deviceRed: 0.0, green: 0.0, blue: 0, alpha: 0.9) let expectedSliderRightColor = NSColor.white let expectedBackgroundColor = NSColor(deviceRed: 42.0 / 255.0, green: 42.0 / 255.0, blue: 42.0 / 255.0, alpha: 1.0) let expectedTextColor = NSColor.white let expectedTextBackgroundColor = NSColor(deviceRed: 42.0 / 255.0, green: 55.0 / 255.0, blue: 62.0 / 255.0, alpha: 1.0) let expectedShutdownImageName = "ellipsis.circle" let expectedPreferenceImageName = "plus" let expectedPinImageName = "macwindow.on.rectangle" let expectedSunriseImageName = "sunrise.fill" let expectedSunsetImageName = "sunset.fill" let expectedRemoveImageName = "xmark" let expectedExtraOptionsImage = "ExtraWhite" let expectedMenubarOnboardingImage = "Dark Menubar" let expectedExtraOptionsHighlightedImage = "ExtraWhiteHighlighted" let expectedSharingImage = "square.and.arrow.up.on.square.fill" let expectedCurrentLocationImage = "location.fill" let expectedPopoverApperarance = NSAppearance(named: NSAppearance.Name.vibrantDark)! let expectedAddImage = "plus" let expectedAddImageHighlighted = "Add White" let expectedPrivacyTabImage = "lock" let expectedAppearanceTabImage = "eye" let expectedCalendarTabImage = "calendar" let expectedGeneralTabImage = "gearshape" let expectedAboutTabImage = "info.circle" let expectedVideoCallImage = "video.circle.fill" let expectedFilledTrashImage = "trash.fill" let expectedBackwardsImage = "gobackward.15" let expectedForwardsImage = "goforward.15" let expectedResetSliderImage = "xmark.circle.fill" XCTAssertEqual(subject.sliderKnobColor(), expectedSliderKnobColor) XCTAssertEqual(subject.sliderRightColor(), expectedSliderRightColor) XCTAssertEqual(subject.mainBackgroundColor(), expectedBackgroundColor) XCTAssertEqual(subject.mainTextColor(), expectedTextColor) XCTAssertEqual(subject.textBackgroundColor(), expectedTextBackgroundColor) XCTAssertEqual(subject.shutdownImage().accessibilityDescription, expectedShutdownImageName) XCTAssertEqual(subject.preferenceImage().accessibilityDescription, expectedPreferenceImageName) XCTAssertEqual(subject.pinImage().accessibilityDescription, expectedPinImageName) XCTAssertEqual(subject.sunriseImage().accessibilityDescription, expectedSunriseImageName) XCTAssertEqual(subject.sunsetImage().accessibilityDescription, expectedSunsetImageName) XCTAssertEqual(subject.removeImage().accessibilityDescription, expectedRemoveImageName) XCTAssertEqual(subject.extraOptionsImage().name(), expectedExtraOptionsImage) XCTAssertEqual(subject.menubarOnboardingImage().name(), expectedMenubarOnboardingImage) XCTAssertEqual(subject.extraOptionsHighlightedImage().name(), expectedExtraOptionsHighlightedImage) XCTAssertEqual(subject.sharingImage().accessibilityDescription, expectedSharingImage) XCTAssertEqual(subject.currentLocationImage().accessibilityDescription, expectedCurrentLocationImage) XCTAssertEqual(subject.popoverAppearance(), expectedPopoverApperarance) XCTAssertEqual(subject.addImage().accessibilityDescription, expectedAddImage) XCTAssertEqual(subject.addImageHighlighted().name(), expectedAddImageHighlighted) XCTAssertEqual(subject.privacyTabImage().accessibilityDescription, expectedPrivacyTabImage) XCTAssertEqual(subject.appearanceTabImage().accessibilityDescription, expectedAppearanceTabImage) XCTAssertEqual(subject.calendarTabImage().accessibilityDescription, expectedCalendarTabImage) XCTAssertEqual(subject.generalTabImage()?.accessibilityDescription, expectedGeneralTabImage) XCTAssertEqual(subject.aboutTabImage()?.accessibilityDescription, expectedAboutTabImage) XCTAssertEqual(subject.videoCallImage()?.accessibilityDescription, expectedVideoCallImage) XCTAssertEqual(subject.filledTrashImage()?.accessibilityDescription, expectedFilledTrashImage) XCTAssertEqual(subject.goBackwardsImage()?.accessibilityDescription, expectedBackwardsImage) XCTAssertEqual(subject.goForwardsImage()?.accessibilityDescription, expectedForwardsImage) XCTAssertEqual(subject.resetModernSliderImage()?.accessibilityDescription, expectedResetSliderImage) XCTAssertEqual(subject.description, "Current Theme is \(Themer.Theme.dark)") } func testSystemTheme() throws { let currentSystemTheme = UserDefaults.standard.string(forKey: "AppleInterfaceStyle")?.lowercased().contains("dark") ?? false ? Themer.Theme.dark : Themer.Theme.light let subject = Themer(index: 2) // 2 is for system theme let expectedSliderKnobColor = currentSystemTheme == .light ? NSColor(deviceRed: 255.0, green: 255.0, blue: 255, alpha: 0.9) : NSColor(deviceRed: 0.0, green: 0.0, blue: 0, alpha: 0.9) let expectedSliderRightColor = currentSystemTheme == .dark ? NSColor.white : NSColor.gray let expectedBackgroundColor = currentSystemTheme == .dark ? NSColor.windowBackgroundColor : NSColor.white let expectedTextColor = NSColor.textColor let expectedTextBackgroundColor = currentSystemTheme == .light ? NSColor(deviceRed: 241.0 / 255.0, green: 241.0 / 255.0, blue: 241.0 / 255.0, alpha: 1.0) : NSColor.controlBackgroundColor let expectedShutdownImageName = "ellipsis.circle" let expectedPreferenceImageName = "plus" let expectedPinImageName = "macwindow.on.rectangle" let expectedSunriseImageName = "sunrise.fill" let expectedSunsetImageName = "sunset.fill" let expectedRemoveImageName = "xmark" let expectedExtraOptionsImage = "Extra Dynamic" let expectedMenubarOnboardingImage = "Dynamic Menubar" let expectedExtraOptionsHighlightedImage = "ExtraHighlighted Dynamic" let expectedSharingImage = "square.and.arrow.up.on.square.fill" let expectedCurrentLocationImage = "location.fill" let expectedPopoverApperarance = NSAppearance.current let expectedAddImage = "plus" let expectedAddImageHighlighted = "Add White" let expectedPrivacyTabImage = "lock" let expectedAppearanceTabImage = "eye" let expectedCalendarTabImage = "calendar" let expectedGeneralTabImage = "gearshape" let expectedAboutTabImage = "info.circle" let expectedVideoCallImage = "video.circle.fill" let expectedFilledTrashImage = "trash.fill" let expectedBackwardsImage = "gobackward.15" let expectedForwardsImage = "goforward.15" let expectedResetSliderImage = "xmark.circle.fill" XCTAssertEqual(subject.sliderKnobColor(), expectedSliderKnobColor) XCTAssertEqual(subject.sliderRightColor(), expectedSliderRightColor) XCTAssertEqual(subject.mainBackgroundColor(), expectedBackgroundColor) XCTAssertEqual(subject.mainTextColor(), expectedTextColor) XCTAssertEqual(subject.textBackgroundColor(), expectedTextBackgroundColor) XCTAssertEqual(subject.shutdownImage().accessibilityDescription, expectedShutdownImageName) XCTAssertEqual(subject.preferenceImage().accessibilityDescription, expectedPreferenceImageName) XCTAssertEqual(subject.pinImage().accessibilityDescription, expectedPinImageName) XCTAssertEqual(subject.sunriseImage().accessibilityDescription, expectedSunriseImageName) XCTAssertEqual(subject.sunsetImage().accessibilityDescription, expectedSunsetImageName) XCTAssertEqual(subject.removeImage().accessibilityDescription, expectedRemoveImageName) XCTAssertEqual(subject.extraOptionsImage().name(), expectedExtraOptionsImage) XCTAssertEqual(subject.menubarOnboardingImage().name(), expectedMenubarOnboardingImage) XCTAssertEqual(subject.extraOptionsHighlightedImage().name(), expectedExtraOptionsHighlightedImage) XCTAssertEqual(subject.sharingImage().accessibilityDescription, expectedSharingImage) XCTAssertEqual(subject.currentLocationImage().accessibilityDescription, expectedCurrentLocationImage) XCTAssertEqual(subject.popoverAppearance(), expectedPopoverApperarance) XCTAssertEqual(subject.addImage().accessibilityDescription, expectedAddImage) XCTAssertEqual(subject.addImageHighlighted().name(), expectedAddImageHighlighted) XCTAssertEqual(subject.privacyTabImage().accessibilityDescription, expectedPrivacyTabImage) XCTAssertEqual(subject.appearanceTabImage().accessibilityDescription, expectedAppearanceTabImage) XCTAssertEqual(subject.calendarTabImage().accessibilityDescription, expectedCalendarTabImage) XCTAssertEqual(subject.generalTabImage()?.accessibilityDescription, expectedGeneralTabImage) XCTAssertEqual(subject.aboutTabImage()?.accessibilityDescription, expectedAboutTabImage) XCTAssertEqual(subject.videoCallImage()?.accessibilityDescription, expectedVideoCallImage) XCTAssertEqual(subject.filledTrashImage()?.accessibilityDescription, expectedFilledTrashImage) XCTAssertEqual(subject.goBackwardsImage()?.accessibilityDescription, expectedBackwardsImage) XCTAssertEqual(subject.goForwardsImage()?.accessibilityDescription, expectedForwardsImage) XCTAssertEqual(subject.resetModernSliderImage()?.accessibilityDescription, expectedResetSliderImage) XCTAssertEqual(subject.description, "System Theme is \(currentSystemTheme == .dark ? Themer.Theme.dark : Themer.Theme.light)") } func testSolarizedLightTheme() throws { let subject = Themer(index: 3) // 3 is for solarized light theme let expectedSliderKnobColor = NSColor(deviceRed: 255.0, green: 255.0, blue: 255, alpha: 0.9) let expectedSliderRightColor = NSColor.gray let expectedBackgroundColor = NSColor(deviceRed: 253.0 / 255.0, green: 246.0 / 255.0, blue: 227.0 / 255.0, alpha: 1.0) let expectedTextColor = NSColor.black let expectedTextBackgroundColor = NSColor(deviceRed: 238.0 / 255.0, green: 232.0 / 255.0, blue: 213.0 / 255.0, alpha: 1.0) let expectedShutdownImageName = "ellipsis.circle" let expectedPreferenceImageName = "plus" let expectedPinImageName = "macwindow.on.rectangle" let expectedSunriseImageName = "sunrise.fill" let expectedSunsetImageName = "sunset.fill" let expectedRemoveImageName = "xmark" let expectedExtraOptionsImage = "Extra" let expectedMenubarOnboardingImage = "Light Menubar" let expectedExtraOptionsHighlightedImage = "ExtraHighlighted" let expectedSharingImage = "square.and.arrow.up.on.square.fill" let expectedCurrentLocationImage = "location.fill" let expectedPopoverApperarance = NSAppearance(named: NSAppearance.Name.vibrantLight)! let expectedAddImage = "plus" let expectedAddImageHighlighted = "Add White" let expectedPrivacyTabImage = "lock" let expectedAppearanceTabImage = "eye" let expectedCalendarTabImage = "calendar" let expectedGeneralTabImage = "gearshape" let expectedAboutTabImage = "info.circle" let expectedVideoCallImage = "video.circle.fill" let expectedFilledTrashImage = "trash.fill" let expectedBackwardsImage = "gobackward.15" let expectedForwardsImage = "goforward.15" let expectedResetSliderImage = "xmark.circle.fill" XCTAssertEqual(subject.sliderKnobColor(), expectedSliderKnobColor) XCTAssertEqual(subject.sliderRightColor(), expectedSliderRightColor) XCTAssertEqual(subject.mainBackgroundColor(), expectedBackgroundColor) XCTAssertEqual(subject.mainTextColor(), expectedTextColor) XCTAssertEqual(subject.textBackgroundColor(), expectedTextBackgroundColor) XCTAssertEqual(subject.shutdownImage().accessibilityDescription, expectedShutdownImageName) XCTAssertEqual(subject.preferenceImage().accessibilityDescription, expectedPreferenceImageName) XCTAssertEqual(subject.pinImage().accessibilityDescription, expectedPinImageName) XCTAssertEqual(subject.sunriseImage().accessibilityDescription, expectedSunriseImageName) XCTAssertEqual(subject.sunsetImage().accessibilityDescription, expectedSunsetImageName) XCTAssertEqual(subject.removeImage().accessibilityDescription, expectedRemoveImageName) XCTAssertEqual(subject.extraOptionsImage().name(), expectedExtraOptionsImage) XCTAssertEqual(subject.menubarOnboardingImage().name(), expectedMenubarOnboardingImage) XCTAssertEqual(subject.extraOptionsHighlightedImage().name(), expectedExtraOptionsHighlightedImage) XCTAssertEqual(subject.sharingImage().accessibilityDescription, expectedSharingImage) XCTAssertEqual(subject.currentLocationImage().accessibilityDescription, expectedCurrentLocationImage) XCTAssertEqual(subject.popoverAppearance(), expectedPopoverApperarance) XCTAssertEqual(subject.addImage().accessibilityDescription, expectedAddImage) XCTAssertEqual(subject.addImageHighlighted().name(), expectedAddImageHighlighted) XCTAssertEqual(subject.privacyTabImage().accessibilityDescription, expectedPrivacyTabImage) XCTAssertEqual(subject.appearanceTabImage().accessibilityDescription, expectedAppearanceTabImage) XCTAssertEqual(subject.calendarTabImage().accessibilityDescription, expectedCalendarTabImage) XCTAssertEqual(subject.generalTabImage()?.accessibilityDescription, expectedGeneralTabImage) XCTAssertEqual(subject.aboutTabImage()?.accessibilityDescription, expectedAboutTabImage) XCTAssertEqual(subject.videoCallImage()?.accessibilityDescription, expectedVideoCallImage) XCTAssertEqual(subject.filledTrashImage()?.accessibilityDescription, expectedFilledTrashImage) XCTAssertEqual(subject.goBackwardsImage()?.accessibilityDescription, expectedBackwardsImage) XCTAssertEqual(subject.goForwardsImage()?.accessibilityDescription, expectedForwardsImage) XCTAssertEqual(subject.resetModernSliderImage()?.accessibilityDescription, expectedResetSliderImage) } func testSolarizedDarkTheme() throws { let subject = Themer(index: 4) // 4 is for solarized dark theme let expectedSliderKnobColor = NSColor(deviceRed: 0.0, green: 0.0, blue: 0, alpha: 0.9) let expectedSliderRightColor = NSColor.gray let expectedBackgroundColor = NSColor(deviceRed: 7.0 / 255.0, green: 54.0 / 255.0, blue: 66.0 / 255.0, alpha: 1.0) let expectedTextColor = NSColor.white let expectedTextBackgroundColor = NSColor(deviceRed: 88.0 / 255.0, green: 110.0 / 255.0, blue: 117.0 / 255.0, alpha: 1.0) let expectedShutdownImageName = "ellipsis.circle" let expectedPreferenceImageName = "plus" let expectedPinImageName = "macwindow.on.rectangle" let expectedSunriseImageName = "sunrise.fill" let expectedSunsetImageName = "sunset.fill" let expectedRemoveImageName = "xmark" let expectedExtraOptionsImage = "ExtraWhite" let expectedMenubarOnboardingImage = "Dark Menubar" let expectedExtraOptionsHighlightedImage = "ExtraWhiteHighlighted" let expectedSharingImage = "square.and.arrow.up.on.square.fill" let expectedCurrentLocationImage = "location.fill" let expectedPopoverApperarance = NSAppearance(named: NSAppearance.Name.vibrantDark)! let expectedAddImage = "plus" let expectedAddImageHighlighted = "Add White" let expectedPrivacyTabImage = "lock" let expectedAppearanceTabImage = "eye" let expectedCalendarTabImage = "calendar" let expectedGeneralTabImage = "gearshape" let expectedAboutTabImage = "info.circle" let expectedVideoCallImage = "video.circle.fill" let expectedFilledTrashImage = "trash.fill" let expectedBackwardsImage = "gobackward.15" let expectedForwardsImage = "goforward.15" let expectedResetSliderImage = "xmark.circle.fill" XCTAssertEqual(subject.sliderKnobColor(), expectedSliderKnobColor) XCTAssertEqual(subject.sliderRightColor(), expectedSliderRightColor) XCTAssertEqual(subject.mainBackgroundColor(), expectedBackgroundColor) XCTAssertEqual(subject.mainTextColor(), expectedTextColor) XCTAssertEqual(subject.textBackgroundColor(), expectedTextBackgroundColor) XCTAssertEqual(subject.shutdownImage().accessibilityDescription, expectedShutdownImageName) XCTAssertEqual(subject.preferenceImage().accessibilityDescription, expectedPreferenceImageName) XCTAssertEqual(subject.pinImage().accessibilityDescription, expectedPinImageName) XCTAssertEqual(subject.sunriseImage().accessibilityDescription, expectedSunriseImageName) XCTAssertEqual(subject.sunsetImage().accessibilityDescription, expectedSunsetImageName) XCTAssertEqual(subject.removeImage().accessibilityDescription, expectedRemoveImageName) XCTAssertEqual(subject.extraOptionsImage().name(), expectedExtraOptionsImage) XCTAssertEqual(subject.menubarOnboardingImage().name(), expectedMenubarOnboardingImage) XCTAssertEqual(subject.extraOptionsHighlightedImage().name(), expectedExtraOptionsHighlightedImage) XCTAssertEqual(subject.sharingImage().accessibilityDescription, expectedSharingImage) XCTAssertEqual(subject.currentLocationImage().accessibilityDescription, expectedCurrentLocationImage) XCTAssertEqual(subject.popoverAppearance(), expectedPopoverApperarance) XCTAssertEqual(subject.addImage().accessibilityDescription, expectedAddImage) XCTAssertEqual(subject.addImageHighlighted().name(), expectedAddImageHighlighted) XCTAssertEqual(subject.privacyTabImage().accessibilityDescription, expectedPrivacyTabImage) XCTAssertEqual(subject.appearanceTabImage().accessibilityDescription, expectedAppearanceTabImage) XCTAssertEqual(subject.calendarTabImage().accessibilityDescription, expectedCalendarTabImage) XCTAssertEqual(subject.generalTabImage()?.accessibilityDescription, expectedGeneralTabImage) XCTAssertEqual(subject.aboutTabImage()?.accessibilityDescription, expectedAboutTabImage) XCTAssertEqual(subject.videoCallImage()?.accessibilityDescription, expectedVideoCallImage) XCTAssertEqual(subject.filledTrashImage()?.accessibilityDescription, expectedFilledTrashImage) XCTAssertEqual(subject.goBackwardsImage()?.accessibilityDescription, expectedBackwardsImage) XCTAssertEqual(subject.goForwardsImage()?.accessibilityDescription, expectedForwardsImage) XCTAssertEqual(subject.resetModernSliderImage()?.accessibilityDescription, expectedResetSliderImage) } }