@@ -737,6 +737,8 @@ - (void) testWindowResize {
737737 [self waitForVimClose ];
738738}
739739
740+ #pragma mark Full screen tests
741+
740742- (void )waitForNativeFullscreenEnter {
741743 XCTestExpectation *expectation = [self expectationWithDescription: @" NativeFullscreenEnter" ];
742744
@@ -862,4 +864,114 @@ - (void) testFullScreenNative {
862864 [self fullScreenTestWithNative: YES ];
863865}
864866
867+ - (void ) testFullScreenNonNativeOptions {
868+ MMAppController *app = MMAppController.sharedInstance ;
869+
870+ // Cache test defaults
871+ NSUserDefaults *ud = NSUserDefaults .standardUserDefaults ;
872+ NSDictionary <NSString *, id > *defaults = [ud volatileDomainForName: NSArgumentDomain ];
873+ NSMutableDictionary <NSString *, id > *newDefaults = [defaults mutableCopy ];
874+
875+ // Change native full screen setting
876+ newDefaults[MMNativeFullScreenKey] = @NO ;
877+ [ud setVolatileDomain: newDefaults forName: NSArgumentDomain ];
878+
879+ [app openNewWindow: NewWindowClean activate: YES ];
880+ [self waitForVimOpenAndMessages ];
881+
882+ MMWindowController *winController = app.keyVimController .windowController ;
883+ MMTextView *textView = [[winController vimView ] textView ];
884+
885+ // Test maxvert/maxhorz
886+ [self sendStringToVim: @" :set lines=10\n " withMods: 0 ];
887+ [self sendStringToVim: @" :set columns=30\n " withMods: 0 ];
888+ [self sendStringToVim: @" :set fuoptions=\n " withMods: 0 ];
889+ [self waitForVimProcess ];
890+
891+ [self sendStringToVim: @" :set fu\n " withMods: 0 ];
892+ [self waitForEventHandlingAndVimProcess ];
893+ [self waitForEventHandlingAndVimProcess ];
894+ XCTAssertEqual (textView.maxRows , 10 );
895+ XCTAssertEqual (textView.maxColumns , 30 );
896+ [self sendStringToVim: @" :set nofu\n " withMods: 0 ];
897+ [self sendStringToVim: @" :set fuoptions=maxvert\n " withMods: 0 ];
898+ [self sendStringToVim: @" :set fu\n " withMods: 0 ];
899+ [self waitForEventHandlingAndVimProcess ];
900+ [self waitForEventHandlingAndVimProcess ];
901+ XCTAssertGreaterThan (textView.maxRows , 10 );
902+ XCTAssertEqual (textView.maxColumns , 30 );
903+ [self sendStringToVim: @" :set nofu\n " withMods: 0 ];
904+ [self sendStringToVim: @" :set fuoptions=maxhorz\n " withMods: 0 ];
905+ [self sendStringToVim: @" :set fu\n " withMods: 0 ];
906+ [self waitForEventHandlingAndVimProcess ];
907+ [self waitForEventHandlingAndVimProcess ];
908+ XCTAssertEqual (textView.maxRows , 10 );
909+ XCTAssertGreaterThan (textView.maxColumns , 30 );
910+ [self sendStringToVim: @" :set nofu\n " withMods: 0 ];
911+ [self sendStringToVim: @" :set fuoptions=maxhorz,maxvert\n " withMods: 0 ];
912+ [self sendStringToVim: @" :set fu\n " withMods: 0 ];
913+ [self waitForEventHandlingAndVimProcess ];
914+ [self waitForEventHandlingAndVimProcess ];
915+ XCTAssertGreaterThan (textView.maxRows , 10 );
916+ XCTAssertGreaterThan (textView.maxColumns , 30 );
917+
918+ // Test background color
919+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithArgbInt: 0xff000000 ]); // default is black
920+
921+ // Make sure changing colorscheme doesn't override the background color unlike in non-full screen mode
922+ [self sendStringToVim: @" :color desert\n " withMods: 0 ];
923+ [self waitForEventHandlingAndVimProcess ];
924+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithArgbInt: 0xff000000 ]);
925+
926+ // Changing fuoptions should update the background color immediately
927+ [self sendStringToVim: @" :set fuoptions=background:Normal\n " withMods: 0 ];
928+ [self waitForEventHandlingAndVimProcess ];
929+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithArgbInt: 0xff333333 ]);
930+
931+ // And switching colorscheme should also update the color as well
932+ [self sendStringToVim: @" :color blue\n " withMods: 0 ];
933+ [self waitForEventHandlingAndVimProcess ];
934+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithArgbInt: 0xff000087 ]);
935+
936+ // Test parsing manual colors in both 8-digit mode (alpha is ignored) and 6-digit mode
937+ [self sendStringToVim: @" :set fuoptions=background:#11234567\n " withMods: 0 ];
938+ [self waitForEventHandlingAndVimProcess ];
939+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithArgbInt: 0xff234567 ]);
940+ [self sendStringToVim: @" :set fuoptions=background:#abcdef\n " withMods: 0 ];
941+ [self waitForEventHandlingAndVimProcess ];
942+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithArgbInt: 0xffabcdef ]);
943+
944+ // Test setting transparency while in full screen. We always set the alpha of the background color to 0.001 when transparency is set.
945+ [self sendStringToVim: @" :set fuoptions=background:#ffff00\n :set transparency=50\n " withMods: 0 ];
946+ [self waitForEventHandlingAndVimProcess ];
947+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithRed: 1 green: 1 blue: 0 alpha: 0.001 ]);
948+
949+ [self sendStringToVim: @" :set fuoptions=background:#00ff00\n " withMods: 0 ];
950+ [self waitForEventHandlingAndVimProcess ];
951+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithRed: 0 green: 1 blue: 0 alpha: 0.001 ]);
952+
953+ [self sendStringToVim: @" :set transparency=0\n " withMods: 0 ];
954+ [self waitForEventHandlingAndVimProcess ];
955+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithRed: 0 green: 1 blue: 0 alpha: 1 ]);
956+
957+ // Test setting transparency outside of full screen and make sure it still works
958+ [self sendStringToVim: @" :set nofu\n " withMods: 0 ];
959+ [self waitForEventHandlingAndVimProcess ];
960+ [self waitForEventHandlingAndVimProcess ];
961+ [self sendStringToVim: @" :set transparency=50 fuoptions=background:#0000ff\n " withMods: 0 ];
962+ [self sendStringToVim: @" :set fu\n " withMods: 0 ];
963+ [self waitForEventHandlingAndVimProcess ];
964+ [self waitForEventHandlingAndVimProcess ];
965+ XCTAssertEqualObjects (winController.window .backgroundColor , [NSColor colorWithRed: 0 green: 0 blue: 1 alpha: 0.001 ]);
966+
967+ // Clean up
968+ [[app keyVimController ] sendMessage: VimShouldCloseMsgID data: nil ];
969+ [self waitForVimClose ];
970+
971+ XCTAssertEqual (0 , [app vimControllers ].count );
972+
973+ // Restore settings to test defaults
974+ [ud setVolatileDomain: defaults forName: NSArgumentDomain ];
975+ }
976+
865977@end
0 commit comments