/** * Copyright (c) 2004-2011 QOS.ch * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ package org.slf4j.migrator; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.slf4j.migrator.line.MultiGroupConversionRule; import junit.framework.TestCase; public class AternativeApproach extends TestCase { /** * In this test we see that we cans use more simple Pattern to do the * conversion * */ public void test() { MultiGroupConversionRule cr2 = new MultiGroupConversionRule(Pattern.compile("(.*)(Log)")); cr2.addReplacement(2, "LOGGER"); String s = "abcd Log"; Pattern pat = cr2.getPattern(); Matcher m = pat.matcher(s); assertTrue(m.matches()); String r = cr2.replace(m); assertEquals("abcd LOGGER", r); System.out.println(r); } /** * In this test we replace, using the simple Pattern (Log), the full Log * declaration and instantiation. This is not convenient because we will also * replace all String containing "Log". */ public void test2() { Pattern pat = Pattern.compile("(Log)"); String s = "abcd Log ="; Matcher m = pat.matcher(s); assertTrue(m.find()); String r = m.replaceAll("Logger"); assertEquals("abcd Logger =", r); String s1 = "Log l = LogFactory.getLog(MyClass.class);"; m = pat.matcher(s1); assertTrue(m.find()); r = m.replaceAll("Logger"); assertEquals("Logger l = LoggerFactory.getLogger(MyClass.class);", r); String s2 = "Logabc "; m = pat.matcher(s2); assertTrue(m.find()); String s3 = "abcLog"; m = pat.matcher(s3); assertTrue(m.find()); } /** * In this test we use a simple Pattern to replace the log instantiation * without influence on Log declaration. * */ public void test3() { Pattern pat = Pattern.compile("LogFactory.getFactory\\(\\).getInstance\\("); String s = "Log log = LogFactory.getFactory().getInstance(\"x\");"; Matcher m = pat.matcher(s); assertTrue(m.find()); String r = m.replaceAll("LoggerFactory.getLogger("); assertEquals("Log log = LoggerFactory.getLogger(\"x\");", r); String nonMatching = "Log log = xxx;"; pat.matcher(nonMatching); assertFalse(m.find()); } /** * In this test we try to replace keyword Log without influence on String * containing Log We see that we have to use two different Patterns */ public void test4() { Pattern pat = Pattern.compile("(\\sLog\\b)"); String s = "abcd Log ="; Matcher m = pat.matcher(s); assertTrue(m.find()); String r = m.replaceAll(" Logger"); assertEquals("abcd Logger =", r); String s2 = "Logabcd "; m = pat.matcher(s2); assertFalse(m.find()); String s3 = "abcdLogabcd "; m = pat.matcher(s3); assertFalse(m.find()); String s4 = "abcdLog"; m = pat.matcher(s4); assertFalse(m.find()); String s5 = "Log myLog"; m = pat.matcher(s5); assertFalse(m.find()); Pattern pat2 = Pattern.compile("^Log\\b"); Matcher m2 = pat2.matcher(s5); assertTrue(m2.find()); r = m2.replaceAll("Logger"); assertEquals("Logger myLog", r); } /** * In this test we combine two Pattern to achieve the intended conversion */ public void test5() { Pattern pat = Pattern.compile("(\\sLog\\b)"); String s = "public Log myLog =LogFactory.getFactory().getInstance(myClass.class);"; Matcher m = pat.matcher(s); assertTrue(m.find()); String r = m.replaceAll(" Logger"); assertEquals("public Logger myLog =LogFactory.getFactory().getInstance(myClass.class);", r); Pattern pat2 = Pattern.compile("LogFactory.getFactory\\(\\).getInstance\\("); m = pat2.matcher(r); assertTrue(m.find()); r = m.replaceAll("LoggerFactory.getLogger("); assertEquals("public Logger myLog =LoggerFactory.getLogger(myClass.class);", r); } }