Package com.google.gdt.eclipse.designer.core.model.web

Source Code of com.google.gdt.eclipse.designer.core.model.web.WebModelTest

/*******************************************************************************
* Copyright 2011 Google Inc. All Rights Reserved.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* 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 com.google.gdt.eclipse.designer.core.model.web;

import com.google.gdt.eclipse.designer.core.GTestUtils;
import com.google.gdt.eclipse.designer.model.web.ServletElement;
import com.google.gdt.eclipse.designer.model.web.ServletMappingElement;
import com.google.gdt.eclipse.designer.model.web.WebAppElement;
import com.google.gdt.eclipse.designer.model.web.WebDocumentEditContext;
import com.google.gdt.eclipse.designer.model.web.WebUtils;
import com.google.gdt.eclipse.designer.model.web.WelcomeFileElement;
import com.google.gdt.eclipse.designer.model.web.WelcomeFileListElement;

import org.eclipse.wb.internal.core.utils.IOUtils2;
import org.eclipse.wb.internal.core.utils.xml.DocumentElement;
import org.eclipse.wb.tests.designer.core.AbstractJavaTest;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;

import static org.fest.assertions.Assertions.assertThat;

import org.apache.commons.lang.StringUtils;

import java.io.ByteArrayInputStream;
import java.util.List;

/**
* Test for web.xml file and its model.
*
* @author scheglov_ke
*/
public class WebModelTest extends AbstractJavaTest {
  private static IFile m_webFile;
  private WebDocumentEditContext m_editContext;
  private String m_webContent;
  private WebAppElement m_webElement;

  ////////////////////////////////////////////////////////////////////////////
  //
  // Life cycle
  //
  ////////////////////////////////////////////////////////////////////////////
  @Override
  protected void setUp() throws Exception {
    super.setUp();
    if (m_testProject == null) {
      do_projectCreate();
      GTestUtils.configure(GTestUtils.getLocation(), m_testProject);
    }
    // create module
    {
      GTestUtils.createModule(m_testProject, "test.Module");
      m_webFile = getFile("war/WEB-INF/web.xml");
    }
  }

  @Override
  protected void tearDown() throws Exception {
    if (m_editContext != null) {
      m_editContext.disconnect();
      m_editContext = null;
    }
    // remove module
    if (m_testProject != null) {
      IFolder folder = m_testProject.getJavaProject().getProject().getFolder("src");
      deleteFiles(folder);
    }
    // remove other things
    super.tearDown();
  }

  @Override
  public void test_tearDown() throws Exception {
    do_projectDispose();
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Exit zone :-) XXX
  //
  ////////////////////////////////////////////////////////////////////////////
  public void _test_exit() throws Exception {
    System.exit(0);
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // welcome-file
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Tests for {@link WelcomeFileElement}, parse and update existing.
   */
  public void test_WelcomeFileElement_update() throws Exception {
    parse(
        "<web-app>",
        "  <welcome-file-list>",
        "    <welcome-file>MyFile.html</welcome-file>",
        "  </welcome-file-list>",
        "</web-app>");
    assertThat(m_webElement.getChildren()).hasSize(1);
    // prepare WelcomeFileListElement
    WelcomeFileListElement welcomeFileListElement;
    {
      List<WelcomeFileListElement> welcomeListElements = m_webElement.getWelcomeFileListElements();
      assertThat(welcomeListElements).hasSize(1);
      welcomeFileListElement = welcomeListElements.get(0);
    }
    // prepare WelcomeFileElement
    WelcomeFileElement welcomeFile;
    {
      List<WelcomeFileElement> welcomeFiles = welcomeFileListElement.getWelcomeFiles();
      assertThat(welcomeFiles).hasSize(1);
      welcomeFile = welcomeFiles.get(0);
    }
    // initial state
    assertEquals("MyFile.html", welcomeFile.getName());
    // set new "name" value
    {
      welcomeFile.setName("newName.html");
      assertEquals("newName.html", welcomeFile.getName());
      m_webContent = StringUtils.replace(m_webContent, "MyFile", "newName");
      assertUpdatedModuleFile(m_webContent);
    }
    // toString()
    assertEquals(
        getSource(
            "<web-app>",
            "  <welcome-file-list>",
            "    <welcome-file>newName.html</welcome-file>",
            "  </welcome-file-list>",
            "</web-app>"),
        m_webElement.toString());
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Tests
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Parses module from {@link IFile}.
   */
  public void test_parseFromFile() throws Exception {
    WebAppElement webElement = WebUtils.readModule(m_webFile);
    List<DocumentElement> elements = webElement.getChildren(DocumentElement.class);
    assertThat(elements).isNotEmpty();
  }

  /**
   * Parse empty web.xml file.
   */
  public void test_parseEmpty() throws Exception {
    parse(new String[]{
        "<!-- ------------- -->",
        "<!-- ------------- -->",
        "<!-- ------------- -->",
        "<web-app/>"});
    assertThat(m_webElement.getChildren()).isEmpty();
    // toString()
    assertEquals("<web-app/>\n", m_webElement.toString());
  }

  /**
   * Parse file with some default element.
   */
  public void test_parseNonSpecial() throws Exception {
    parse("<web-app>", "  <some-tag attr='value'/>", "</web-app>");
    assertThat(m_webElement.getChildren()).hasSize(1);
    // toString()
    assertEquals(
        getSourceDQ("<web-app>", "  <some-tag attr='value'/>", "</web-app>"),
        m_webElement.toString());
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // ServletElement
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Tests for {@link ServletElement}, parse and update existing.
   */
  public void test_ServletElement_update() throws Exception {
    parse(
        "<web-app>",
        "  <servlet>",
        "    <servlet-name>someName</servlet-name>",
        "    <servlet-class>some.Class</servlet-class>",
        "  </servlet>",
        "</web-app>");
    assertThat(m_webElement.getChildren()).hasSize(1);
    //
    List<ServletElement> servletElements = m_webElement.getServletElements();
    ServletElement servletElement = servletElements.get(0);
    assertThat(servletElements).hasSize(1);
    assertEquals("someName", servletElement.getName());
    assertEquals("some.Class", servletElement.getClassName());
    // set new "name" value
    {
      servletElement.setName("newName");
      m_webContent = StringUtils.replace(m_webContent, "someName", "newName");
      assertUpdatedModuleFile(m_webContent);
    }
    // set new "class" value
    {
      servletElement.setClassName("new.Class");
      m_webContent = StringUtils.replace(m_webContent, "some.Class", "new.Class");
      assertUpdatedModuleFile(m_webContent);
    }
    // toString()
    assertEquals(
        getSource(
            "<web-app>",
            "  <servlet>",
            "    <servlet-name>newName</servlet-name>",
            "    <servlet-class>new.Class</servlet-class>",
            "  </servlet>",
            "</web-app>"),
        m_webElement.toString());
  }

  /**
   * Tests for {@link ServletElement}, create new.
   */
  public void test_ServletElement_new() throws Exception {
    parse("<web-app>", "</web-app>");
    assertThat(m_webElement.getChildren()).isEmpty();
    //
    ServletElement servletElement = new ServletElement();
    m_webElement.addChild(servletElement);
    assertEquals(null, servletElement.getName());
    assertEquals(null, servletElement.getClassName());
    // set attributes
    servletElement.setName("newName");
    servletElement.setClassName("new.Class");
    assertEquals("newName", servletElement.getName());
    assertEquals("new.Class", servletElement.getClassName());
    // toString()
    assertEquals(
        getSource(
            "<web-app>",
            "  <servlet>",
            "    <servlet-name>newName</servlet-name>",
            "    <servlet-class>new.Class</servlet-class>",
            "  </servlet>",
            "</web-app>"),
        m_webElement.toString());
  }

  /**
   * Tests for {@link ServletMappingElement}, parse and update existing.
   */
  public void test_ServletMappingElement_update() throws Exception {
    parse(
        "<web-app>",
        "  <servlet-mapping>",
        "    <servlet-name>someName</servlet-name>",
        "    <url-pattern>some/pattern</url-pattern>",
        "  </servlet-mapping>",
        "</web-app>");
    assertThat(m_webElement.getChildren()).hasSize(1);
    //
    List<ServletMappingElement> elements = m_webElement.getServletMappingElements();
    ServletMappingElement element = elements.get(0);
    assertThat(elements).hasSize(1);
    assertEquals("someName", element.getName());
    assertEquals("some/pattern", element.getPattern());
    // set new "name" value
    {
      element.setName("newName");
      m_webContent = StringUtils.replace(m_webContent, "someName", "newName");
      assertUpdatedModuleFile(m_webContent);
    }
    // set new "pattern" value
    {
      element.setPattern("new/pattern");
      m_webContent = StringUtils.replace(m_webContent, "some/pattern", "new/pattern");
      assertUpdatedModuleFile(m_webContent);
    }
    // toString()
    assertEquals(
        getSource(
            "<web-app>",
            "  <servlet-mapping>",
            "    <servlet-name>newName</servlet-name>",
            "    <url-pattern>new/pattern</url-pattern>",
            "  </servlet-mapping>",
            "</web-app>"),
        m_webElement.toString());
  }

  /**
   * Tests for {@link ServletMappingElement}, create new.
   */
  public void test_ServletMappingElement_new() throws Exception {
    parse("<web-app>", "</web-app>");
    assertThat(m_webElement.getChildren()).isEmpty();
    //
    ServletMappingElement element = new ServletMappingElement();
    m_webElement.addChild(element);
    assertEquals(null, element.getName());
    assertEquals(null, element.getPattern());
    // set attributes
    element.setName("newName");
    element.setPattern("new/pattern");
    assertEquals("newName", element.getName());
    assertEquals("new/pattern", element.getPattern());
    // toString()
    assertEquals(
        getSource(
            "<web-app>",
            "  <servlet-mapping>",
            "    <servlet-name>newName</servlet-name>",
            "    <url-pattern>new/pattern</url-pattern>",
            "  </servlet-mapping>",
            "</web-app>"),
        m_webElement.toString());
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Utils
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Parses GWT module file.
   */
  private void parse(String... lines) throws Exception {
    // set web.xml content
    {
      m_webContent = getSource(lines);
      ByteArrayInputStream input = new ByteArrayInputStream(m_webContent.getBytes());
      m_webFile.setContents(input, true, false, null);
    }
    // prepare new edit context
    m_editContext = new WebDocumentEditContext(m_webFile);
    // prepare web-app element
    m_webElement = m_editContext.getWebAppElement();
  }

  /**
   * Commits {@link #m_editContext} and asserts that {@link #m_webFile} has expected contents.
   */
  private void assertUpdatedModuleFile(String expectedContent) throws Exception {
    m_editContext.commit();
    assertEquals(expectedContent, IOUtils2.readString(m_webFile));
  }
}
TOP

Related Classes of com.google.gdt.eclipse.designer.core.model.web.WebModelTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.