Add more unit tests. Add app icon and info.plist information in preparation for TestFlight beta
@@ -8,7 +8,6 @@
 | 
			
		||||
 | 
			
		||||
/* Begin PBXBuildFile section */
 | 
			
		||||
		E124B9D929941A4D00C0D2D2 /* PrinterConfigView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E124B9D829941A4D00C0D2D2 /* PrinterConfigView.swift */; };
 | 
			
		||||
		E16378B229A43CE1002F05E9 /* SoyuzScratchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16378B129A43CE1002F05E9 /* SoyuzScratchTests.swift */; };
 | 
			
		||||
		E16378B429A491E6002F05E9 /* MoonrakerSocketManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16378B329A491E6002F05E9 /* MoonrakerSocketManagerTests.swift */; };
 | 
			
		||||
		E180B5E92992CD9100425DB0 /* SoyuzApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E180B5E82992CD9100425DB0 /* SoyuzApp.swift */; };
 | 
			
		||||
		E180B5ED2992CD9200425DB0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E180B5EC2992CD9200425DB0 /* Assets.xcassets */; };
 | 
			
		||||
@@ -46,7 +45,6 @@
 | 
			
		||||
/* Begin PBXFileReference section */
 | 
			
		||||
		E124B9D72993FE5500C0D2D2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
 | 
			
		||||
		E124B9D829941A4D00C0D2D2 /* PrinterConfigView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrinterConfigView.swift; sourceTree = "<group>"; };
 | 
			
		||||
		E16378B129A43CE1002F05E9 /* SoyuzScratchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoyuzScratchTests.swift; sourceTree = "<group>"; };
 | 
			
		||||
		E16378B329A491E6002F05E9 /* MoonrakerSocketManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoonrakerSocketManagerTests.swift; sourceTree = "<group>"; };
 | 
			
		||||
		E180B5E52992CD9100425DB0 /* Soyuz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Soyuz.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		E180B5E82992CD9100425DB0 /* SoyuzApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoyuzApp.swift; sourceTree = "<group>"; };
 | 
			
		||||
@@ -141,7 +139,6 @@
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				E180B5FF2992CD9300425DB0 /* SoyuzTests.swift */,
 | 
			
		||||
				E16378B129A43CE1002F05E9 /* SoyuzScratchTests.swift */,
 | 
			
		||||
				E1A93C6829CD627100BAE750 /* BonjourBrowserTests.swift */,
 | 
			
		||||
				E16378B329A491E6002F05E9 /* MoonrakerSocketManagerTests.swift */,
 | 
			
		||||
			);
 | 
			
		||||
@@ -330,7 +327,6 @@
 | 
			
		||||
				E180B6002992CD9300425DB0 /* SoyuzTests.swift in Sources */,
 | 
			
		||||
				E16378B429A491E6002F05E9 /* MoonrakerSocketManagerTests.swift in Sources */,
 | 
			
		||||
				E1A93C6929CD627100BAE750 /* BonjourBrowserTests.swift in Sources */,
 | 
			
		||||
				E16378B229A43CE1002F05E9 /* SoyuzScratchTests.swift in Sources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/100.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/102.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/1024.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 62 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/114.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 5.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/120.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 5.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/128.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/144.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 7.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/152.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 7.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/16.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 624 B  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/167.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 8.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/172.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 8.8 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/180.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 9.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/196.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 10 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/20.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 791 B  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/216.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 11 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/256.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 14 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/29.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/32.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/40.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/48.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/50.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 33 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/55.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/57.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/58.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/60.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/64.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.8 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/66.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.9 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/72.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/76.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/80.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/87.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.9 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/88.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/92.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.2 KiB  | 
							
								
								
									
										289
									
								
								Soyuz/Assets.xcassets/AppIcon.appiconset/Contents.json
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						@@ -1,54 +1,343 @@
 | 
			
		||||
{
 | 
			
		||||
  "images" : [
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "40.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "20x20"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "60.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "3x",
 | 
			
		||||
      "size" : "20x20"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "29.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "29x29"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "58.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "29x29"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "87.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "3x",
 | 
			
		||||
      "size" : "29x29"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "80.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "40x40"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "120.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "3x",
 | 
			
		||||
      "size" : "40x40"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "57.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "57x57"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "114.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "57x57"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "120.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "60x60"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "180.png",
 | 
			
		||||
      "idiom" : "iphone",
 | 
			
		||||
      "scale" : "3x",
 | 
			
		||||
      "size" : "60x60"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "20.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "20x20"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "40.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "20x20"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "29.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "29x29"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "58.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "29x29"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "40.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "40x40"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "80.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "40x40"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "50.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "50x50"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "100.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "50x50"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "72.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "72x72"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "144.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "72x72"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "76.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "76x76"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "152.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "76x76"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "167.png",
 | 
			
		||||
      "idiom" : "ipad",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "83.5x83.5"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "1024.png",
 | 
			
		||||
      "idiom" : "ios-marketing",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "1024x1024"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "16.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "16x16"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "32.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "16x16"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "32.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "32x32"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "64.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "32x32"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "128.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "128x128"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "256.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "128x128"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "256.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "256x256"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "512.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "256x256"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "512.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "512x512"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "1024.png",
 | 
			
		||||
      "idiom" : "mac",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "512x512"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "48.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "notificationCenter",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "24x24",
 | 
			
		||||
      "subtype" : "38mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "55.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "notificationCenter",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "27.5x27.5",
 | 
			
		||||
      "subtype" : "42mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "58.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "companionSettings",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "29x29"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "87.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "companionSettings",
 | 
			
		||||
      "scale" : "3x",
 | 
			
		||||
      "size" : "29x29"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "66.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "notificationCenter",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "33x33",
 | 
			
		||||
      "subtype" : "45mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "80.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "appLauncher",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "40x40",
 | 
			
		||||
      "subtype" : "38mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "88.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "appLauncher",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "44x44",
 | 
			
		||||
      "subtype" : "40mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "92.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "appLauncher",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "46x46",
 | 
			
		||||
      "subtype" : "41mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "100.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "appLauncher",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "50x50",
 | 
			
		||||
      "subtype" : "44mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "102.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "appLauncher",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "51x51",
 | 
			
		||||
      "subtype" : "45mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "appLauncher",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "54x54",
 | 
			
		||||
      "subtype" : "49mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "172.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "quickLook",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "86x86",
 | 
			
		||||
      "subtype" : "38mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "196.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "quickLook",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "98x98",
 | 
			
		||||
      "subtype" : "42mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "216.png",
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "quickLook",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "108x108",
 | 
			
		||||
      "subtype" : "44mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "quickLook",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "117x117",
 | 
			
		||||
      "subtype" : "45mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "watch",
 | 
			
		||||
      "role" : "quickLook",
 | 
			
		||||
      "scale" : "2x",
 | 
			
		||||
      "size" : "129x129",
 | 
			
		||||
      "subtype" : "49mm"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "1024.png",
 | 
			
		||||
      "idiom" : "watch-marketing",
 | 
			
		||||
      "scale" : "1x",
 | 
			
		||||
      "size" : "1024x1024"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "info" : {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,8 @@
 | 
			
		||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
<plist version="1.0">
 | 
			
		||||
<dict>
 | 
			
		||||
	<key>LSApplicationCategoryType</key>
 | 
			
		||||
	<string>public.app-category.utilities</string>
 | 
			
		||||
	<key>NSAppTransportSecurity</key>
 | 
			
		||||
	<dict>
 | 
			
		||||
		<key>NSAllowsArbitraryLoads</key>
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,12 @@ class DummyEngine: Engine {
 | 
			
		||||
    var delegate: Starscream.EngineDelegate?
 | 
			
		||||
    
 | 
			
		||||
    @Published var startCalled = false
 | 
			
		||||
    @Published var stopCalled = false
 | 
			
		||||
    
 | 
			
		||||
    func resetForNextTest() {
 | 
			
		||||
        self.startCalled = false
 | 
			
		||||
        self.stopCalled = false
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func register(delegate: Starscream.EngineDelegate) {
 | 
			
		||||
        self.delegate = delegate
 | 
			
		||||
@@ -25,10 +31,12 @@ class DummyEngine: Engine {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func stop(closeCode: UInt16) {
 | 
			
		||||
        stopCalled = true
 | 
			
		||||
        return
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func forceStop() {
 | 
			
		||||
        stopCalled = true
 | 
			
		||||
        return
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
@@ -66,22 +74,57 @@ class MoonrakerSocketManagerTests: XCTestCase {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    func testConnectToBonjourEndpoint() {
 | 
			
		||||
        let endpoint = NWEndpoint.hostPort(host: "localhost", port: .http)
 | 
			
		||||
        print("Trying to connect to bonjour endpoint \(endpoint)")
 | 
			
		||||
        
 | 
			
		||||
        let expectation = XCTestExpectation(description: "MoonrakerSocketManager.connectToBonjourEndpoint opens Starscream socket")
 | 
			
		||||
        // Test connecting to endpoint
 | 
			
		||||
        let connectExpectation = XCTestExpectation(description: "MoonrakerSocketManager.connectToBonjourEndpoint opens Starscream socket")
 | 
			
		||||
        
 | 
			
		||||
        cancellable = engine.$startCalled
 | 
			
		||||
            .sink(receiveValue: { newValue in
 | 
			
		||||
                if newValue == true {
 | 
			
		||||
                    expectation.fulfill()
 | 
			
		||||
                    connectExpectation.fulfill()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
        
 | 
			
		||||
        socketManager?.connectToBonjourEndpoint(endpoint)
 | 
			
		||||
        wait(for: [expectation], timeout: 2)
 | 
			
		||||
        wait(for: [connectExpectation], timeout: 2)
 | 
			
		||||
        XCTAssertTrue(engine.startCalled)
 | 
			
		||||
        
 | 
			
		||||
        // Test screen sleeping
 | 
			
		||||
        engine.resetForNextTest()
 | 
			
		||||
        let screenSleepExpectation = XCTestExpectation(description: "MoonrakerSocketManager.screenChangedSleepState screen sleep triggers Starscream socket disconnection")
 | 
			
		||||
        
 | 
			
		||||
        let sleepNotification = Notification(name: NSWorkspace.screensDidSleepNotification)
 | 
			
		||||
        
 | 
			
		||||
        cancellable = engine.$stopCalled
 | 
			
		||||
            .sink(receiveValue: { newValue in
 | 
			
		||||
                if newValue == true {
 | 
			
		||||
                    screenSleepExpectation.fulfill()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
        
 | 
			
		||||
        socketManager?.screenChangedSleepState(sleepNotification)
 | 
			
		||||
        wait(for: [screenSleepExpectation], timeout: 2)
 | 
			
		||||
        XCTAssertTrue(engine.stopCalled)
 | 
			
		||||
        
 | 
			
		||||
        // Test screen waking
 | 
			
		||||
        engine.resetForNextTest()
 | 
			
		||||
        let screenWakeExpectation = XCTestExpectation(description: "MoonrakerSocketManager.screenChangedSleepState screen wake triggers Starscream socket reconnection")
 | 
			
		||||
        
 | 
			
		||||
        let wakeNotification = Notification(name: NSWorkspace.screensDidWakeNotification)
 | 
			
		||||
        
 | 
			
		||||
        cancellable = engine.$startCalled
 | 
			
		||||
            .sink(receiveValue: { newValue in
 | 
			
		||||
                if newValue == true {
 | 
			
		||||
                    screenWakeExpectation.fulfill()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
        
 | 
			
		||||
        socketManager?.screenChangedSleepState(wakeNotification)
 | 
			
		||||
        wait(for: [screenWakeExpectation], timeout: 2)
 | 
			
		||||
        XCTAssertTrue(engine.startCalled)
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
//
 | 
			
		||||
//  KlipperMonScratchTests.swift
 | 
			
		||||
//  KlipperMonTests
 | 
			
		||||
//
 | 
			
		||||
//  Created by maddiefuzz on 2/20/23.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
import XCTest
 | 
			
		||||
 | 
			
		||||
class SoyuzScratchTests: XCTestCase {
 | 
			
		||||
    
 | 
			
		||||
    func testOneAndOneIsEqual() {
 | 
			
		||||
        let a = 1
 | 
			
		||||
        let b = 1
 | 
			
		||||
        XCTAssertEqual(a, b, "1 did not equal 1.")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||