1package com.xtremelabs.robolectric.res;
2
3import com.xtremelabs.robolectric.R;
4import com.xtremelabs.robolectric.WithTestDefaultsRunner;
5import org.junit.Before;
6import org.junit.Test;
7import org.junit.runner.RunWith;
8
9import java.io.BufferedReader;
10import java.io.IOException;
11import java.io.InputStream;
12import java.io.InputStreamReader;
13import java.io.Reader;
14import java.io.StringWriter;
15import java.io.Writer;
16
17import static com.xtremelabs.robolectric.util.TestUtil.resourceFile;
18import static org.junit.Assert.assertEquals;
19
20@RunWith(WithTestDefaultsRunner.class)
21public class RawResourceLoaderTest {
22
23    private RawResourceLoader rawResourceLoader;
24
25    @Before public void setUp() throws Exception {
26        ResourceExtractor resourceExtractor = new ResourceExtractor();
27        resourceExtractor.addLocalRClass(R.class);
28        rawResourceLoader = new RawResourceLoader(resourceExtractor, resourceFile("res"));
29    }
30
31    @Test
32    public void shouldReturnRawResourcesWithExtensions() throws Exception {
33        InputStream is = rawResourceLoader.getValue(R.raw.raw_resource);
34        assertEquals("raw txt file contents", readString(is));
35    }
36
37    @Test
38    public void shouldReturnRawResourcesWithoutExtensions() throws Exception {
39        InputStream is = rawResourceLoader.getValue(R.raw.raw_no_ext);
40        assertEquals("no ext file contents", readString(is));
41    }
42
43    private static String readString(InputStream is) throws IOException {
44        Writer writer = new StringWriter();
45        char[] buffer = new char[1024];
46        try {
47            Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
48            int n;
49            while ((n = reader.read(buffer)) != -1) {
50                writer.write(buffer, 0, n);
51            }
52        } finally {
53            is.close();
54        }
55        return writer.toString();
56    }
57}
58