Листинг 3.1. HtmlUtil.java (FitNesse 20070619)
>public static String testableHtml(
> PageData pageData,
> boolean includeSuiteSetup
>) throws Exception {
> WikiPage wikiPage = pageData.getWikiPage();
> StringBuffer buffer = new StringBuffer();
> if (pageData.hasAttribute("Test")) {
> if (includeSuiteSetup) {
> WikiPage suiteSetup =
> PageCrawlerImpl.getInheritedPage(
> SuiteResponder.SUITE_SETUP_NAME, wikiPage
> );
> if (suiteSetup != null) {
> WikiPagePath pagePath =
> suiteSetup.getPageCrawler().getFullPath(suiteSetup);
> String pagePathName = PathParser.render(pagePath);
> buffer.append("!include -setup .")
> .append(pagePathName)
> .append("\n");
> }
> }
> WikiPage setup =
> PageCrawlerImpl.getInheritedPage("SetUp", wikiPage);
> if (setup != null) {
> WikiPagePath setupPath =
> wikiPage.getPageCrawler().getFullPath(setup);
> String setupPathName = PathParser.render(setupPath);"
> buffer.append("!include -setup .")
> .append(setupPathName)
> .append("\n");
> }
> }
> buffer.append(pageData.getContent());
> if (pageData.hasAttribute("Test")) {
> WikiPage teardown =
> PageCrawlerImpl.getInheritedPage("TearDown", wikiPage);
> if (teardown != null) {
> WikiPagePath tearDownPath =
> wikiPage.getPageCrawler().getFullPath(teardown);
> String tearDownPathName = PathParser.render(tearDownPath);
> buffer.append("\n")
> .append("!include -teardown .")
> .append(tearDownPathName)
> .append("\n");
> }
> if (includeSuiteSetup) {
> WikiPage suiteTeardown =
> PageCrawlerImpl.getInheritedPage(
> SuiteResponder.SUITE_TEARDOWN_NAME,
> wikiPage
> );
> if (suiteTeardown != null) {
> WikiPagePath pagePath =
> suiteTeardown.getPageCrawler().getFullPath (suiteTeardown);
> String pagePathName = PathParser.render(pagePath);
> buffer.append("!include -teardown .")
> .append(pagePathName)
> .append("\n");
> }
> }
> }
> pageData.setContent(buffer.toString());
> return pageData.getHtml();
>}
Удалось ли вам разобраться с функцией за три минуты? Вероятно, нет. В ней происходит слишком много всего, и притом на разных уровнях абстракции. Загадочные строки и непонятные вызовы функций смешиваются в конструкциях if двойной вложенности, к тому же зависящих от состояния флагов.
Но после выделения нескольких методов, переименований и небольшой реструктуризации мне удалось представить смысл этой функции в девяти строках листинга 3.2. Посмотрим, удастся ли вам разобраться в ней за следующие три минуты.