// Copyright 2017 The Nomulus Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package google.registry.testing; import static com.google.common.truth.Truth.assert_; import static google.registry.util.ResourceUtils.readResourceUtf8; import com.google.common.base.Joiner; import java.net.MalformedURLException; import java.net.URL; /** * Helper class to compare a string against a golden file and print out update instructions if * necessary. */ public class GoldenFileTestHelper { private static final String UPDATE_COMMAND = "google.registry.tools.RegistryTool -e localhost %1$s >javatests%2$s"; private static final String UPDATE_INSTRUCTIONS = Joiner.on('\n') .join( "", "-------------------------------------------------------------------------------", "Your changes affect the %3$s. To update the checked-in version, run:", UPDATE_COMMAND, ""); private static String getPathProper(URL url) throws MalformedURLException { String protocol = url.getProtocol(); if (protocol.equals("jar")) { url = new URL(url.getPath()); protocol = url.getProtocol(); } if (protocol.equals("file")) { String[] components = url.getPath().split("!"); if (components.length >= 2) { return components[1]; } } return url.getPath(); } public static void testGoldenFile( String actualValue, URL goldenFileUrl, String goldenFileDescription, String nomulusCommand) throws Exception { // Don't use Truth's isEqualTo() because the output is huge and unreadable for large files. if (!actualValue.equals(readResourceUtf8(goldenFileUrl).trim())) { assert_() .fail( String.format( UPDATE_INSTRUCTIONS, nomulusCommand, getPathProper(goldenFileUrl), goldenFileDescription)); } } }