/* * Copyright 2015 Igor Maznitsa. * * 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 com.igormaznitsa.mindmap.model; import java.io.File; import java.net.URI; import java.util.Properties; import org.apache.commons.lang.SystemUtils; import org.junit.Test; import static org.junit.Assert.*; import static org.junit.Assume.*; public class MMapURITest { private static void assumeWindows() { assumeTrue(SystemUtils.IS_OS_WINDOWS); } private static void assumeNotWindows() { assumeFalse(SystemUtils.IS_OS_WINDOWS); } @Test public void testReplaceName() throws Exception { assertEquals("universe.doc?query=123", new MMapURI("?query=123#eee").replaceName("universe.doc").asURI().toString()); assertEquals("hello/universe.doc?query=123", new MMapURI("hello/world.txt?query=123#eee").replaceName("universe.doc").asURI().toString()); assertEquals("hello?query=123", new MMapURI("universe/?query=123#eee").replaceName("hello").asURI().toString()); assertEquals("hello?query=123", new MMapURI("universe?query=123#eee").replaceName("hello").asURI().toString()); assertEquals("file:///folder/folder2/file.txt?query=123", new MMapURI("file:///folder/folder2/hoho.txt?query=123").replaceName("file.txt").asURI().toString()); assertEquals("file:///folder/folder2/file%253A%253A%253Csome%253E.txt?query=123", new MMapURI("file:///folder/folder2/hoho.txt?query=123").replaceName("file::<some>.txt").asURI().toString()); assertEquals("file:///folder1/folder2/some/new/fold/hello.txt?query=123", new MMapURI("file:///folder1/folder2/some/new/folder/hoho.txt?query=123").replaceName("new/fold/hello.txt").asURI().toString()); } @Test public void testReplaceBaseInPath() throws Exception { assertEquals("hello/world/test", new MMapURI("test").replaceBaseInPath(false, new URI("hello/world"), 0).asURI().toString()); assertEquals("hello/world/some/test", new MMapURI("some/test").replaceBaseInPath(false, new URI("hello/world"), 1).asURI().toString()); assertEquals("http://some/world/test", new MMapURI("http://some/test").replaceBaseInPath(false, new URI("http://hello/world"), 0).asURI().toString()); assertEquals("file:///newfolder/newfolder1/hello/universe/and/world", new MMapURI("file:///server/folder/hello/universe/and/world").replaceBaseInPath(false, new URI("file:///newfolder/newfolder1"), 3).asURI().toString()); assertEquals("/newfolder/newfolder1/hello/universe/and/world", new MMapURI("server/folder/hello/universe/and/world").replaceBaseInPath(false, new URI("file:///newfolder/newfolder1"), 3).asURI().toString()); } @Test(expected = NullPointerException.class) public void testCreate_StrNull() throws Exception { new MMapURI((String) null); } @Test(expected = AssertionError.class) public void testCreate_URINull() throws Exception { new MMapURI((URI) null); } @Test public void testCreate_Str() throws Exception { MMapURI uri = new MMapURI("http://www.hello.world"); assertEquals("http://www.hello.world", uri.asString(false, false)); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); uri = new MMapURI("/some/test"); assertEquals("/some/test", uri.asString(false, false)); assertFalse(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); uri = new MMapURI("/some/test?hello=1234"); assertEquals("/some/test?hello=1234", uri.asString(false, true)); assertFalse(uri.isAbsolute()); assertEquals(1, uri.getParameters().size()); } @Test public void testCreate_NotWindows_Uri_NoProps() throws Exception { assumeNotWindows(); MMapURI uri = new MMapURI(new URI("file:///K%C3%B5ik/v%C3%B5i/mitte/midagi.txt")); assertEquals("file:///K%C3%B5ik/v%C3%B5i/mitte/midagi.txt", uri.asString(false, false)); assertEquals(new File("/Kõik/või/mitte/midagi.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); uri = new MMapURI(new URI("/some/test")); assertEquals("/some/test", uri.asString(false, false)); assertFalse(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); uri = new MMapURI(new URI("/some/test?hello=1234")); assertEquals("/some/test?hello=1234", uri.asString(false, true)); assertFalse(uri.isAbsolute()); assertEquals(1, uri.getParameters().size()); } @Test public void testCreate_NotWindows_Uri_Props() throws Exception { assumeNotWindows(); MMapURI uri = new MMapURI(new URI("file:///K%C3%B5ik/v%C3%B5i/mitte/midagi.txt?one=two")); assertEquals("two", uri.getParameters().getProperty("one")); assertEquals("file:///K%C3%B5ik/v%C3%B5i/mitte/midagi.txt?one=two", uri.asString(false, true)); assertEquals(new File("/Kõik/või/mitte/midagi.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertFalse(uri.getParameters().isEmpty()); uri = new MMapURI(new URI("/some/test")); assertEquals("/some/test", uri.asString(false, false)); assertFalse(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); uri = new MMapURI(new URI("/some/test?hello=1234")); assertEquals("/some/test?hello=1234", uri.asString(false, true)); assertFalse(uri.isAbsolute()); assertEquals(1, uri.getParameters().size()); } @Test public void testCreate_Windows_Uri_NoProps() throws Exception { assumeWindows(); MMapURI uri = new MMapURI(new URI("file://C:/K%C3%B5ik/v%C3%B5i/mitte/midagi.txt")); assertEquals("file://C:/K%C3%B5ik/v%C3%B5i/mitte/midagi.txt", uri.asString(false, false)); assertEquals(new File("C:\\Kõik\\või\\mitte\\midagi.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); uri = new MMapURI(new URI("/some/test")); assertEquals("/some/test", uri.asString(false, false)); assertFalse(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); uri = new MMapURI(new URI("/some/test?hello=1234")); assertEquals("/some/test?hello=1234", uri.asString(false, true)); assertFalse(uri.isAbsolute()); assertEquals(1, uri.getParameters().size()); } @Test public void testCreate_Windows_Uri_Props() throws Exception { assumeWindows(); MMapURI uri = new MMapURI(new URI("file://C:/K%C3%B5ik/v%C3%B5i/mitte/midagi.txt?one=two")); assertEquals("file://C:/K%C3%B5ik/v%C3%B5i/mitte/midagi.txt?one=two", uri.asString(false, true)); assertEquals(new File("C:\\Kõik\\või\\mitte\\midagi.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertFalse(uri.getParameters().isEmpty()); assertEquals("two", uri.getParameters().getProperty("one")); uri = new MMapURI(new URI("/some/test")); assertEquals("/some/test", uri.asString(false, false)); assertFalse(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); uri = new MMapURI(new URI("/some/test?hello=1234")); assertEquals("/some/test?hello=1234", uri.asString(false, true)); assertFalse(uri.isAbsolute()); assertEquals(1, uri.getParameters().size()); } @Test public void testCreate_AbsFile_NotWindows_NoBase_NoProps() throws Exception { assumeNotWindows(); MMapURI uri = new MMapURI(null, new File("/folder/hello world.txt"), null); assertEquals("file:///folder/hello%20world.txt", uri.asString(false, true)); assertEquals("/folder/hello world.txt", uri.asFile(null).getAbsolutePath()); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); } @Test public void testCreate_AbsFile_Windows_NoBase_NoProps() throws Exception { assumeWindows(); MMapURI uri = new MMapURI(null, new File("C:\\folder\\hello world.txt"), null); assertEquals("file://C:/folder/hello%20world.txt", uri.asString(false, true)); assertEquals("C:\\folder\\hello world.txt", uri.asFile(null).getAbsolutePath()); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); } @Test public void testCreate_AbsFile_NotWindows_InsideBase_NoProps() throws Exception { assumeNotWindows(); MMapURI uri = new MMapURI(new File("/folder"), new File("/folder/folder2/hello world.txt"), null); assertEquals("folder2/hello%20world.txt", uri.asString(false, true)); assertEquals(new File((File) null, "folder2/hello world.txt"), uri.asFile(null)); assertFalse(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); } @Test public void testCreate_AbsFile_Windows_InsideBase_NoProps() throws Exception { assumeWindows(); MMapURI uri = new MMapURI(new File("C:\\folder"), new File("C:\\folder\\folder2\\hello world.txt"), null); assertEquals("folder2/hello%20world.txt", uri.asString(false, true)); assertEquals(new File((File) null, "folder2\\hello world.txt"), uri.asFile(null)); assertFalse(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); } @Test public void testCreate_AbsFile_NotWindows_OutsideBase_NoProps() throws Exception { assumeNotWindows(); MMapURI uri = new MMapURI(new File("/folder1"), new File("/folder/folder2/hello world.txt"), null); assertEquals("file:///folder/folder2/hello%20world.txt", uri.asString(false, true)); assertEquals(new File("/folder/folder2/hello world.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); } @Test public void testCreate_AbsFile_Windows_OutsideBase_NoProps() throws Exception { assumeWindows(); MMapURI uri = new MMapURI(new File("C:\\folder1"), new File("C:\\folder\\folder2\\hello world.txt"), null); assertEquals("file://C:/folder/folder2/hello%20world.txt", uri.asString(false, true)); assertEquals(new File("C:\\folder\\folder2\\hello world.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); } @Test public void testCreate_AbsFile_NotWindows_RelativeBase_NoProps() throws Exception { assumeNotWindows(); MMapURI uri = new MMapURI(new File("folder1"), new File("/folder1/folder2/hello world.txt"), null); assertEquals("file:///folder1/folder2/hello%20world.txt", uri.asString(false, true)); assertEquals(new File("/folder1/folder2/hello world.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); } @Test public void testCreate_AbsFile_Windows_RelativeBase_NoProps() throws Exception { assumeWindows(); MMapURI uri = new MMapURI(new File("folder1"), new File("C:\\folder1\\folder2\\hello world.txt"), null); assertEquals("file://C:/folder1/folder2/hello%20world.txt", uri.asString(false, true)); assertEquals(new File("C:\\folder1\\folder2\\hello world.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertTrue(uri.getParameters().isEmpty()); } @Test public void testCreate_AbsFile_NotWindows_OutsideBase_Props() throws Exception { assumeNotWindows(); final Properties props = new Properties(); props.put("привет", "от игоря"); props.put("hello", "world"); MMapURI uri = new MMapURI(new File("/folder1"), new File("/folder/folder2/hello world.txt"), props); assertEquals("file:///folder/folder2/hello%20world.txt?hello=world&%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82=%D0%BE%D1%82+%D0%B8%D0%B3%D0%BE%D1%80%D1%8F", uri.asString(false, true)); assertEquals(new File("/folder/folder2/hello world.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertEquals(2, uri.getParameters().size()); assertEquals("от игоря", uri.getParameters().getProperty("привет")); assertEquals("world", uri.getParameters().getProperty("hello")); } @Test public void testCreate_AbsFile_Windows_OutsideBase_Props() throws Exception { assumeWindows(); final Properties props = new Properties(); props.put("привет", "от игоря"); props.put("hello", "world"); MMapURI uri = new MMapURI(new File("C:\\folder1"), new File("C:\\folder\\folder2\\hello world.txt"), props); assertEquals("file://C:/folder/folder2/hello%20world.txt?hello=world&%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82=%D0%BE%D1%82+%D0%B8%D0%B3%D0%BE%D1%80%D1%8F", uri.asString(false, true)); assertEquals(new File("C:\\folder\\folder2\\hello world.txt"), uri.asFile(null)); assertTrue(uri.isAbsolute()); assertEquals(2, uri.getParameters().size()); assertEquals("от игоря", uri.getParameters().getProperty("привет")); assertEquals("world", uri.getParameters().getProperty("hello")); } @Test public void testMakeFromFilePath_NotWindows_NoBase_NoProps() throws Exception { assumeNotWindows(); final MMapURI uri = MMapURI.makeFromFilePath(null, "/hello/igor and larisa.txt", null); assertEquals(new URI("file:///hello/igor%20and%20larisa.txt"), uri.asURI()); } @Test public void testMakeFromFilePath_Windows_NoBase_NoProps() throws Exception { assumeWindows(); final MMapURI uri = MMapURI.makeFromFilePath(null, "C:\\hello\\igor and larisa.txt", null); assertEquals(new URI("file://C:/hello/igor%20and%20larisa.txt"), uri.asURI()); } @Test public void testMakeFromFilePath_NotWindows_NoBase_Props() throws Exception { assumeNotWindows(); final Properties props = new Properties(); props.put("привет", "от игоря"); props.put("hello", "world"); final MMapURI uri = MMapURI.makeFromFilePath(null, "/hello/igor and larisa.txt", props); assertEquals(new URI("file:///hello/igor%20and%20larisa.txt?hello=world&%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82=%D0%BE%D1%82+%D0%B8%D0%B3%D0%BE%D1%80%D1%8F"), uri.asURI()); } @Test public void testMakeFromFilePath_Windows_NoBase_Props() throws Exception { assumeWindows(); final Properties props = new Properties(); props.put("привет", "от игоря"); props.put("hello", "world"); final MMapURI uri = MMapURI.makeFromFilePath(null, "C:\\hello\\igor and larisa.txt", props); assertEquals(new URI("file://C:/hello/igor%20and%20larisa.txt?hello=world&%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82=%D0%BE%D1%82+%D0%B8%D0%B3%D0%BE%D1%80%D1%8F"), uri.asURI()); } @Test public void testMakeFromFilePath_NotWindows_Base_Props() throws Exception { assumeNotWindows(); final Properties props = new Properties(); props.put("привет", "от игоря"); props.put("hello", "world"); final MMapURI uri = MMapURI.makeFromFilePath(new File("/hello"), "/hello/igor and larisa.txt", props); assertEquals(new URI("igor%20and%20larisa.txt?hello=world&%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82=%D0%BE%D1%82+%D0%B8%D0%B3%D0%BE%D1%80%D1%8F"), uri.asURI()); assertFalse(uri.isAbsolute()); } @Test public void testMakeFromFilePath_Windows_Base_Props() throws Exception { assumeWindows(); final Properties props = new Properties(); props.put("привет", "от игоря"); props.put("hello", "world"); final MMapURI uri = MMapURI.makeFromFilePath(new File("C:\\hello"), "C:\\hello\\igor and larisa.txt", props); assertEquals(new URI("igor%20and%20larisa.txt?hello=world&%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82=%D0%BE%D1%82+%D0%B8%D0%B3%D0%BE%D1%80%D1%8F"), uri.asURI()); assertFalse(uri.isAbsolute()); } @Test public void testAsURI_CreatedAsURI() throws Exception { final URI baseUri = new URI("http://www.igormaznitsa.com?test=one"); final MMapURI uri = new MMapURI(baseUri); assertSame(baseUri, uri.asURI()); assertEquals("one", uri.getParameters().getProperty("test")); } @Test public void testAsURI_Linux_CreatedAsFile() throws Exception { if (SystemUtils.IS_OS_LINUX) { final Properties props = new Properties(); props.put("Kõik või", "tere"); final MMapURI uri = new MMapURI(null, new File("/Kõik/või/mitte/midagi.txt"), props); assertEquals(new URI("file:///K%C3%B5ik/v%C3%B5i/mitte/midagi.txt?K%C3%B5ik+v%C3%B5i=tere"), uri.asURI()); assertEquals("tere", uri.getParameters().getProperty("Kõik või")); assertEquals(new File("/Kõik/või/mitte/midagi.txt"), uri.asFile(null)); } } @Test public void testAsURI_Windows_CreatedAsFile() throws Exception { assumeWindows(); final Properties props = new Properties(); props.put("Kõik või", "tere"); final MMapURI uri = new MMapURI(null, new File("C:\\Kõik\\või\\mitte\\midagi.txt"), props); assertEquals(new URI("file://C:/K%C3%B5ik/v%C3%B5i/mitte/midagi.txt?K%C3%B5ik+v%C3%B5i=tere"), uri.asURI()); assertEquals("tere", uri.getParameters().getProperty("Kõik või")); assertEquals(new File("C:\\Kõik\\või\\mitte\\midagi.txt"), uri.asFile(null)); } @Test public void testGetExtension() throws Exception { assertEquals("", new MMapURI("http://wwww.hello.world/").getExtension()); assertEquals("", new MMapURI("http://wwww.hello.world/test").getExtension()); assertEquals("abc", new MMapURI("http://wwww.hello.world/test.abc").getExtension()); assertEquals("ABC", new MMapURI("http://wwww.hello.world/test.ABC").getExtension()); assertEquals("ABC", new MMapURI("http://wwww.hello.world/test.ABC?dot=eer.txt").getExtension()); assertEquals("ABC", new MMapURI("http://wwww.hello.world/test.ABC?dot=eer.txt#rwwewe").getExtension()); } }