/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * 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 org.jetbrains.idea.maven.dom; import com.intellij.openapi.vfs.VirtualFile; import java.io.IOException; public class MavenTypingTest extends MavenDomTestCase { public void testTypingOpenBrace() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>$<caret></name>"); assertTypeResult('{', "<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${<caret>}</name>"); } public void testTypingOpenBraceInsideOtherBrace() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${<caret></name>"); assertTypeResult('{', "<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${{<caret></name>"); } public void testTypingOpenBraceWithExistingClosedBrace() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>$<caret>}</name>"); assertTypeResult('{', "<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${<caret>}</name>"); } public void testTypingOpenBraceBeforeChar() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>$<caret>foo</name>"); assertTypeResult('{', "<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${<caret>foo</name>"); } public void testTypingOpenBraceBeforeWhitespace() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>$<caret> foo</name>"); assertTypeResult('{', "<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${<caret>} foo</name>"); } public void testTypingOpenBraceWithoutDollar() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name><caret></name>"); assertTypeResult('{', "<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>{<caret></name>"); } public void testTypingOpenBraceInTheEndOfFile() throws Exception { VirtualFile f = createProjectSubFile("pom.xml", "<project>" + " <groupId>test</groupId>" + " <artifactId>project</artifactId>" + " <version>1</version>" + " <name>$<caret>"); assertTypeResultInRegularFile(f, '{', "<project>" + " <groupId>test</groupId>" + " <artifactId>project</artifactId>" + " <version>1</version>" + " <name>${<caret>}"); } public void testTypingOpenBraceInsideTagDoesNothing() throws Exception { if (ignore()) return; createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<$<caret>name>"); assertTypeResult('{', "<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<${<caret>name>"); } public void testDoNotHandleNonMavenFiles() throws Exception { VirtualFile f = createProjectSubFile("foo.xml", "$<caret>"); assertTypeResultInRegularFile(f, '{', "${<caret>"); } public void testWorksInFilteredResources() throws Exception { createProjectSubDir("res"); importProject("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<build>" + " <resources>" + " <resource>" + " <directory>res</directory>" + " <filtering>true</filtering>" + " </resource>" + " </resources>" + "</build>"); VirtualFile f = createProjectSubFile("res/foo.properties", "foo=$<caret>"); assertTypeResultInRegularFile(f, '{', "foo=${<caret>}"); } public void testDoesNotWorInNotFilteredResources() throws Exception { createProjectSubDir("res"); importProject("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<build>" + " <resources>" + " <resource>" + " <directory>res</directory>" + " <filtering>false</filtering>" + " </resource>" + " </resources>" + "</build>"); VirtualFile f = createProjectSubFile("res/foo.properties", "foo=$<caret>"); assertTypeResultInRegularFile(f, '{', "foo=${<caret>"); } public void testDeletingOpenBrace() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${<caret>}</name>"); assertBackspaceResult("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>$<caret></name>"); } public void testDeletingOpenBraceWithTextInside() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${<caret>foo}</name>"); assertBackspaceResult("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>$<caret>foo}</name>"); } public void testDeletingOpenBraceWithoutClosed() throws Exception { createProjectPom("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>${<caret></name>"); assertBackspaceResult("<groupId>test</groupId>" + "<artifactId>project</artifactId>" + "<version>1</version>" + "<name>$<caret></name>"); } public void testDoNotHandleDeletionInsideRegularFile() throws Exception { VirtualFile f = createProjectSubFile("foo.html", "${<caret>}"); assertBackspaceResultInRegularFile(f, "$<caret>}"); } public void testDeletingInTheEndOfFile() throws Exception { VirtualFile f = createProjectSubFile("pom.xml", "<project>" + " <groupId>test</groupId>" + " <artifactId>project</artifactId>" + " <version>1</version>" + " <name>${<caret>"); assertBackspaceResultInRegularFile(f, "<project>" + " <groupId>test</groupId>" + " <artifactId>project</artifactId>" + " <version>1</version>" + " <name>$<caret>"); } private void assertTypeResult(char c, String xml) throws IOException { assertTypeResultInRegularFile(myProjectPom, c, createPomXml(xml)); } private void assertTypeResultInRegularFile(VirtualFile f, char c, String expected) throws IOException { type(f, c); myFixture.checkResult(expected); } private void assertBackspaceResult(String xml) throws IOException { assertTypeResult('\b', xml); } private void assertBackspaceResultInRegularFile(VirtualFile f, String content) throws IOException { assertTypeResultInRegularFile(f, '\b', content); } }