| 
					
				 | 
			
			
				@@ -7,71 +7,89 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 struct ExpectedSpec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   std::string Path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  bool ParseResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  cmCTestResourceSpec::ReadFileResult ParseResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   cmCTestResourceSpec Expected; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static const std::vector<ExpectedSpec> expectedResourceSpecs = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* clang-format off */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec1.json", true, {{{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {"gpus", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      {"2", 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      {"e", 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {"threads", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }}}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec2.json", true, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec3.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec4.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec5.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec6.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec7.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec8.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec9.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec10.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec11.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec12.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec13.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec14.json", true, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec15.json", true, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec16.json", true, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec17.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec18.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec19.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec20.json", true, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec21.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec22.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec23.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec24.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec25.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec26.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec27.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec28.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec29.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec30.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec31.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec32.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec33.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec34.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec35.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"spec36.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  {"noexist.json", false, {}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /* clang-format on */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec1.json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmCTestResourceSpec::ReadFileResult::READ_OK, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { { { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { "gpus", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          { "2", 4 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          { "e", 1 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { "threads", {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } } } }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec2.json", cmCTestResourceSpec::ReadFileResult::READ_OK, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec3.json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmCTestResourceSpec::ReadFileResult::INVALID_SOCKET_SPEC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec4.json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmCTestResourceSpec::ReadFileResult::INVALID_SOCKET_SPEC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec5.json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmCTestResourceSpec::ReadFileResult::INVALID_SOCKET_SPEC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec6.json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmCTestResourceSpec::ReadFileResult::INVALID_SOCKET_SPEC, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec7.json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmCTestResourceSpec::ReadFileResult::INVALID_RESOURCE_TYPE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec8.json", cmCTestResourceSpec::ReadFileResult::INVALID_RESOURCE, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec9.json", cmCTestResourceSpec::ReadFileResult::INVALID_RESOURCE, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec10.json", cmCTestResourceSpec::ReadFileResult::INVALID_RESOURCE, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec11.json", cmCTestResourceSpec::ReadFileResult::INVALID_RESOURCE, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec12.json", cmCTestResourceSpec::ReadFileResult::INVALID_ROOT, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec13.json", cmCTestResourceSpec::ReadFileResult::JSON_PARSE_ERROR, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec14.json", cmCTestResourceSpec::ReadFileResult::READ_OK, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec15.json", cmCTestResourceSpec::ReadFileResult::READ_OK, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec16.json", cmCTestResourceSpec::ReadFileResult::READ_OK, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec17.json", cmCTestResourceSpec::ReadFileResult::INVALID_RESOURCE, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec18.json", cmCTestResourceSpec::ReadFileResult::INVALID_RESOURCE, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec19.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec20.json", cmCTestResourceSpec::ReadFileResult::READ_OK, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec21.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec22.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec23.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec24.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec25.json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmCTestResourceSpec::ReadFileResult::UNSUPPORTED_VERSION, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec26.json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cmCTestResourceSpec::ReadFileResult::UNSUPPORTED_VERSION, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec27.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec28.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec29.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec30.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec31.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec32.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec33.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec34.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec35.json", cmCTestResourceSpec::ReadFileResult::INVALID_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "spec36.json", cmCTestResourceSpec::ReadFileResult::NO_VERSION, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { "noexist.json", cmCTestResourceSpec::ReadFileResult::FILE_NOT_FOUND, {} }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static bool testSpec(const std::string& path, bool expectedResult, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static bool testSpec(const std::string& path, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     cmCTestResourceSpec::ReadFileResult expectedResult, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      const cmCTestResourceSpec& expected) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   cmCTestResourceSpec actual; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  bool result = actual.ReadFromJSONFile(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  auto result = actual.ReadFromJSONFile(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (result != expectedResult) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::cout << "ReadFromJSONFile(\"" << path << "\") returned " << result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              << ", should be " << expectedResult << std::endl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    std::cout << "ReadFromJSONFile(\"" << path << "\") returned \"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              << cmCTestResourceSpec::ResultToString(result) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              << "\", should be \"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              << cmCTestResourceSpec::ResultToString(expectedResult) << "\"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              << std::endl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (result && actual != expected) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (actual != expected) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::cout << "ReadFromJSONFile(\"" << path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               << "\") did not give expected spec" << std::endl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 |