You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ResourceResolverFactoryTestCase.java 8.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. /* $Id$ */
  18. package org.apache.fop.apps.io;
  19. import java.io.File;
  20. import java.io.FileInputStream;
  21. import java.io.FileOutputStream;
  22. import java.io.IOException;
  23. import java.io.InputStream;
  24. import java.io.OutputStream;
  25. import java.net.URI;
  26. import org.junit.Test;
  27. import static org.junit.Assert.assertArrayEquals;
  28. import static org.junit.Assert.assertEquals;
  29. import static org.mockito.Mockito.mock;
  30. import static org.mockito.Mockito.never;
  31. import static org.mockito.Mockito.times;
  32. import static org.mockito.Mockito.verify;
  33. import org.apache.xmlgraphics.io.Resource;
  34. import org.apache.xmlgraphics.io.ResourceResolver;
  35. import org.apache.xmlgraphics.io.TempResourceResolver;
  36. public class ResourceResolverFactoryTestCase {
  37. private static final byte[] DATA = new byte[]{(byte) 0, (byte) 1, (byte) 2};
  38. private void writeDataTo(File f) throws IOException {
  39. writeDataTo(new FileOutputStream(f));
  40. }
  41. private void writeDataTo(OutputStream os) throws IOException {
  42. os.write(DATA);
  43. os.close();
  44. }
  45. private void checkStream(InputStream inputStream) throws IOException {
  46. byte[] actual = new byte[DATA.length];
  47. for (int i = 0; i < DATA.length; i++) {
  48. actual[i] = (byte) inputStream.read();
  49. }
  50. assertEquals(-1, inputStream.read());
  51. assertArrayEquals(DATA, actual);
  52. }
  53. @Test
  54. public void testDefaultResourceResolverGetResource() throws Exception {
  55. ResourceResolver sut = ResourceResolverFactory.createDefaultResourceResolver();
  56. File inputFile = File.createTempFile("prefix", "suffix");
  57. InputStream is = null;
  58. try {
  59. writeDataTo(inputFile);
  60. is = sut.getResource(inputFile.toURI());
  61. checkStream(is);
  62. } finally {
  63. if (is != null) {
  64. is.close();
  65. }
  66. inputFile.delete();
  67. }
  68. }
  69. @Test
  70. public void testDefaultResourceResolverGetOutput() throws Exception {
  71. ResourceResolver sut = ResourceResolverFactory.createDefaultResourceResolver();
  72. File outputFile = File.createTempFile("prefix", "suffix");
  73. outputFile.deleteOnExit();
  74. writeDataTo(sut.getOutputStream(outputFile.toURI()));
  75. InputStream is = new FileInputStream(outputFile);
  76. try {
  77. checkStream(is);
  78. } finally {
  79. is.close();
  80. }
  81. }
  82. private static class TestCreateTempAwareResourceResolverHelper implements ResourceResolver {
  83. final TempResourceResolver tempResourceResolver = mock(TempResourceResolver.class);
  84. final ResourceResolver defaultResourceResolver = mock(ResourceResolver.class);
  85. final ResourceResolver sut = ResourceResolverFactory.createTempAwareResourceResolver(
  86. tempResourceResolver, defaultResourceResolver);
  87. public Resource getResource(URI uri) throws IOException {
  88. return sut.getResource(uri);
  89. }
  90. public OutputStream getOutputStream(URI uri) throws IOException {
  91. return sut.getOutputStream(uri);
  92. }
  93. }
  94. @Test
  95. public void testCreateTempAwareResourceResolverForTmpResource() throws Exception {
  96. URI uri = URI.create("tmp:///id");
  97. TestCreateTempAwareResourceResolverHelper helper = new TestCreateTempAwareResourceResolverHelper();
  98. helper.getResource(uri);
  99. verify(helper.tempResourceResolver, times(1)).getResource(uri.getPath());
  100. verify(helper.defaultResourceResolver, never()).getResource(uri);
  101. }
  102. @Test
  103. public void testCreateTempAwareResourceResolverForRegularResource() throws Exception {
  104. URI uri = URI.create("file:///path/to/file");
  105. TestCreateTempAwareResourceResolverHelper helper = new TestCreateTempAwareResourceResolverHelper();
  106. helper.getResource(uri);
  107. verify(helper.tempResourceResolver, never()).getResource(uri.getPath());
  108. verify(helper.defaultResourceResolver, times(1)).getResource(uri);
  109. }
  110. @Test
  111. public void testCreateTempAwareResourceResolverForTmpOuput() throws Exception {
  112. URI uri = URI.create("tmp:///id");
  113. TestCreateTempAwareResourceResolverHelper helper = new TestCreateTempAwareResourceResolverHelper();
  114. helper.getOutputStream(uri);
  115. verify(helper.tempResourceResolver, times(1)).getOutputStream(uri.getPath());
  116. verify(helper.defaultResourceResolver, never()).getOutputStream(uri);
  117. }
  118. @Test
  119. public void testCreateTempAwareResourceResolverForRegularOutput() throws Exception {
  120. URI uri = URI.create("file:///path/to/file");
  121. TestCreateTempAwareResourceResolverHelper helper = new TestCreateTempAwareResourceResolverHelper();
  122. helper.getOutputStream(uri);
  123. verify(helper.tempResourceResolver, never()).getOutputStream(uri.getPath());
  124. verify(helper.defaultResourceResolver, times(1)).getOutputStream(uri);
  125. }
  126. @Test
  127. public void testCreateSchemaAwareResourceResolverForDefaultResource() throws Exception {
  128. URI uri = URI.create("file:///path/to/file");
  129. TestCreateSchemaAwareResourceResolverBuilderHelper helper
  130. = new TestCreateSchemaAwareResourceResolverBuilderHelper();
  131. helper.getResource(uri);
  132. verify(helper.registedResourceResolver, never()).getResource(uri);
  133. verify(helper.defaultResourceResolver, times(1)).getResource(uri);
  134. }
  135. @Test
  136. public void testCreateSchemaAwareResourceResolverForRegisteredResource() throws Exception {
  137. URI uri = URI.create(TestCreateSchemaAwareResourceResolverBuilderHelper.SCHEMA + ":///path");
  138. TestCreateSchemaAwareResourceResolverBuilderHelper helper
  139. = new TestCreateSchemaAwareResourceResolverBuilderHelper();
  140. helper.getResource(uri);
  141. verify(helper.registedResourceResolver, times(1)).getResource(uri);
  142. verify(helper.defaultResourceResolver, never()).getResource(uri);
  143. }
  144. @Test
  145. public void testCreateSchemaAwareResourceResolverForDefaultOutput() throws Exception {
  146. URI uri = URI.create("file:///path/to/file");
  147. TestCreateSchemaAwareResourceResolverBuilderHelper helper
  148. = new TestCreateSchemaAwareResourceResolverBuilderHelper();
  149. helper.getOutputStream(uri);
  150. verify(helper.registedResourceResolver, never()).getOutputStream(uri);
  151. verify(helper.defaultResourceResolver, times(1)).getOutputStream(uri);
  152. }
  153. @Test
  154. public void testCreateSchemaAwareResourceResolverForRegisteredOutput() throws Exception {
  155. URI uri = URI.create(TestCreateSchemaAwareResourceResolverBuilderHelper.SCHEMA + ":///path");
  156. TestCreateSchemaAwareResourceResolverBuilderHelper helper
  157. = new TestCreateSchemaAwareResourceResolverBuilderHelper();
  158. helper.getOutputStream(uri);
  159. verify(helper.registedResourceResolver, times(1)).getOutputStream(uri);
  160. verify(helper.defaultResourceResolver, never()).getOutputStream(uri);
  161. }
  162. private static class TestCreateSchemaAwareResourceResolverBuilderHelper implements ResourceResolver {
  163. private static final String SCHEMA = "protocol";
  164. final ResourceResolver registedResourceResolver = mock(ResourceResolver.class);
  165. final ResourceResolver defaultResourceResolver = mock(ResourceResolver.class);
  166. final ResourceResolver sut;
  167. TestCreateSchemaAwareResourceResolverBuilderHelper() {
  168. ResourceResolverFactory.SchemeAwareResourceResolverBuilder builder
  169. = ResourceResolverFactory.createSchemeAwareResourceResolverBuilder(
  170. defaultResourceResolver);
  171. builder.registerResourceResolverForScheme(SCHEMA, registedResourceResolver);
  172. sut = builder.build();
  173. }
  174. public Resource getResource(URI uri) throws IOException {
  175. return sut.getResource(uri);
  176. }
  177. public OutputStream getOutputStream(URI uri) throws IOException {
  178. return sut.getOutputStream(uri);
  179. }
  180. }
  181. }