1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.test.runner;
17
18import android.content.Context;
19import android.os.Bundle;
20
21import com.google.testing.littlemock.LittleMock;
22import com.google.testing.littlemock.Mock;
23
24import org.junit.Before;
25import org.junit.Test;
26
27import java.io.ByteArrayOutputStream;
28import java.io.PrintStream;
29
30/**
31 * Unit tests for {@link AndroidJUnitRunner}.
32 */
33public class AndroidJUnitRunnerTest {
34
35    private AndroidJUnitRunner mAndroidJUnitRunner;
36    private PrintStream mStubStream;
37    @Mock
38    private TestRequestBuilder mMockBuilder;
39    @Mock
40    private Context mMockContext;
41
42    @Before
43    public void setUp() throws Exception {
44        mAndroidJUnitRunner = new AndroidJUnitRunner() {
45
46
47            @Override
48            TestRequestBuilder createTestRequestBuilder(PrintStream writer,
49                    String... packageCodePaths) {
50                return mMockBuilder;
51            }
52
53            @Override
54            public Context getContext() {
55                return mMockContext;
56            }
57        };
58        mStubStream = new PrintStream(new ByteArrayOutputStream());
59        LittleMock.initMocks(this);
60    }
61
62    /**
63     * Test {@link AndroidJUnitRunner#buildRequest(Bundle, PrintStream)} when
64     * a single class name is provided.
65     */
66    @Test
67    public void testBuildRequest_singleClass() {
68        Bundle b = new Bundle();
69        b.putString(AndroidJUnitRunner.ARGUMENT_TEST_CLASS, "ClassName");
70        LittleMock.doNothing().when(mMockBuilder).addTestClass("ClassName");
71        mAndroidJUnitRunner.buildRequest(b, mStubStream);
72        LittleMock.verify(mMockBuilder);
73    }
74
75    /**
76     * Test {@link AndroidJUnitRunner#buildRequest(Bundle, PrintStream)} when
77     * multiple class names are provided.
78     */
79    @Test
80    public void testBuildRequest_multiClass() {
81        Bundle b = new Bundle();
82        b.putString(AndroidJUnitRunner.ARGUMENT_TEST_CLASS, "ClassName1,ClassName2");
83        LittleMock.doNothing().when(mMockBuilder).addTestClass("ClassName1");
84        LittleMock.doNothing().when(mMockBuilder).addTestClass("ClassName2");
85        mAndroidJUnitRunner.buildRequest(b, mStubStream);
86        LittleMock.verify(mMockBuilder);
87    }
88
89    /**
90     * Test {@link AndroidJUnitRunner#buildRequest(Bundle, PrintStream)} when
91     * class name and method name is provided.
92     */
93    @Test
94    public void testBuildRequest_method() {
95        Bundle b = new Bundle();
96        b.putString(AndroidJUnitRunner.ARGUMENT_TEST_CLASS, "ClassName1#method");
97        LittleMock.doNothing().when(mMockBuilder).addTestMethod("ClassName1", "method");
98        mAndroidJUnitRunner.buildRequest(b, mStubStream);
99        LittleMock.verify(mMockBuilder);
100    }
101}
102