/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.sa.engine; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.ResourceBundle; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; public class ViPRServiceTest { // Valid conversion patterns private static final String CONVERSIONS = "bBhHsScCdoxXeEfgGaAtT%"; private static Pattern MESSAGE_FORMAT = Pattern.compile("\\%[^" + CONVERSIONS + "]*[" + CONVERSIONS + "]"); private static volatile ResourceBundle MESSAGES; @BeforeClass public static void loadMessages() { MESSAGES = ResourceBundle.getBundle(ViPRServiceTest.class.getPackage().getName() + ".ViPRService"); } @Test public void validMessagePatterns() { Set<String> invalid = new HashSet<>(); for (String key : MESSAGES.keySet()) { String value = MESSAGES.getString(key); if (!isValidMessage(value)) { invalid.add(key); } } Assert.assertTrue("Invalid message formats: " + invalid, invalid.isEmpty()); } private boolean isValidMessage(String value) { Matcher matcher = MESSAGE_FORMAT.matcher(value); List<Object> args = new ArrayList<>(); while (matcher.find()) { String specifier = matcher.group(); char conversion = specifier.toLowerCase().charAt(specifier.length() - 1); switch (conversion) { case 'c': args.add('c'); break; case 'd': case 'o': case 'x': args.add(0); break; case 'e': case 'f': case 'g': case 'a': args.add(0.0); break; case 't': args.add(new Date()); break; case '%': // skip break; default: args.add(""); break; } } try { String.format(value, args.toArray()); return true; } catch (Exception e) { return false; } } }