package fitnesse.wiki.refactoring; import static org.junit.Assert.*; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; import org.junit.Test; import fitnesse.wiki.fs.InMemoryPage; import fitnesse.wiki.PageData; import fitnesse.wiki.WikiPage; public class ContentReplacingSearchObserverTest { private WikiPage wikiPage; private ContentReplacingSearchObserver observer; @Test public void replacesPageContent() throws Exception { wikiPage = createPageWithContent("simplePageContent"); observer = simpleContentReplacer(); observer.process(wikiPage); assertThat(wikiPage, contentMatches("replacement")); } private ContentReplacingSearchObserver simpleContentReplacer() { return new ContentReplacingSearchObserver(".*", "replacement"); } @Test public void replacesPageContentWithGroups() throws Exception { wikiPage = createPageWithContent("pattern1 some various text pattern2 pattern3"); observer = new ContentReplacingSearchObserver("pattern1(.*)pattern2 pattern3", "replacement1$1replacement2 replacement3"); observer.process(wikiPage); assertThat(wikiPage, contentMatches("replacement1 some various text replacement2 replacement3")); } @Test public void replacesMultiLinedContent() throws Exception { wikiPage = createPageWithContent(multiLineContent()); observer = new ContentReplacingSearchObserver("matching line", "replaced line"); observer.process(wikiPage); assertThat(wikiPage, contentMatches("line 1\nline 2\nline 3\nreplaced line\nline 5\nreplaced line\nline 7")); } private String multiLineContent() { return "line 1\nline 2\nline 3\nmatching line\nline 5\nmatching line\nline 7"; } private WikiPage createPageWithContent(String pageContent) throws Exception { WikiPage wikiPage = InMemoryPage.makeRoot("wikiPage"); PageData pageData = wikiPage.getData(); pageData.setContent(pageContent); wikiPage.commit(pageData); return wikiPage; } private Matcher<WikiPage> contentMatches(final String simpleReplacement) { return new TypeSafeMatcher<WikiPage>() { @Override public boolean matchesSafely(WikiPage wikiPage) { try { return wikiPage.getData().getContent().matches(String.format(".*%s.*", simpleReplacement)); } catch (Exception e) { return false; } } @Override public void describeTo(Description description) { description.appendText("content matching ").appendValue(simpleReplacement); } }; } }