1package com.xtremelabs.robolectric.shadows;
2
3import android.app.Activity;
4import android.content.res.AssetManager;
5import com.xtremelabs.robolectric.Robolectric;
6import com.xtremelabs.robolectric.WithTestDefaultsRunner;
7import com.xtremelabs.robolectric.util.Strings;
8import org.junit.Before;
9import org.junit.Test;
10import org.junit.runner.RunWith;
11
12import java.io.IOException;
13import java.io.InputStream;
14import java.util.Arrays;
15import java.util.List;
16
17import static org.junit.Assert.*;
18
19@RunWith(WithTestDefaultsRunner.class)
20public class AssetManagerTest {
21    AssetManager assetManager;
22    String sp = System.getProperty("file.separator");
23
24    @Before
25    public void setUp() throws Exception {
26        assetManager = new Activity().getAssets();
27    }
28
29    @Test
30    public void assertGetAssetsNotNull() {
31        assertNotNull(assetManager);
32
33        assetManager = Robolectric.application.getAssets();
34        assertNotNull(assetManager);
35
36        assetManager = Robolectric.application.getResources().getAssets();
37        assertNotNull(assetManager);
38    }
39
40    @Test
41    public void assetsPathListing() throws IOException {
42        List<String> files;
43        String testPath;
44
45        testPath = "";
46        files = Arrays.asList(assetManager.list(testPath));
47        assertTrue(files.contains("docs"));
48        assertTrue(files.contains("assetsHome.txt"));
49
50        testPath = "docs";
51        files = Arrays.asList(assetManager.list(testPath));
52        assertTrue(files.contains("extra"));
53
54        testPath = "docs" + sp + "extra";
55        files = Arrays.asList(assetManager.list(testPath));
56        assertTrue(files.contains("testing"));
57
58        testPath = "docs" + sp + "extra" + sp + "testing";
59        files = Arrays.asList(assetManager.list(testPath));
60        assertTrue(files.contains("hello.txt"));
61
62        testPath = "assetsHome.txt";
63        files = Arrays.asList(assetManager.list(testPath));
64        assertFalse(files.contains(testPath));
65
66        testPath = "bogus.file";
67        files = Arrays.asList(assetManager.list(testPath));
68        assertEquals(0, files.size());
69    }
70
71    @Test
72    public void assetsInputStreams() throws IOException {
73        String testPath;
74        String fileContents;
75        InputStream inputStream;
76
77        testPath = "assetsHome.txt";
78        inputStream = assetManager.open(testPath);
79        fileContents = Strings.fromStream(inputStream);
80        assertEquals("assetsHome!", fileContents);
81
82        testPath = "docs" + sp + "extra" + sp + "testing" + sp + "hello.txt";
83        inputStream = assetManager.open(testPath);
84        fileContents = Strings.fromStream(inputStream);
85        assertEquals("hello!", fileContents);
86    }
87}
88