18da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal/*
28da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Copyright 2010 Google Inc.
38da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal *
48da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Licensed under the Apache License, Version 2.0 (the "License"); you may not
58da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * use this file except in compliance with the License. You may obtain a copy of
68da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * the License at
78da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal *
88da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * http://www.apache.org/licenses/LICENSE-2.0
98da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal *
108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Unless required by applicable law or agreed to in writing, software
118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * License for the specific language governing permissions and limitations under
148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * the License.
158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal */
168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalpackage com.google.android.testing.mocking.test;
178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal
188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport android.content.Context;
198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal
208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport com.google.android.testing.mocking.AndroidMock;
218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport com.google.android.testing.mocking.SdkVersion;
228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport com.google.android.testing.mocking.UsesMocks;
238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport com.google.android.testing.mocking.testapp.ClassToMock;
248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal
258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport junit.framework.TestCase;
268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal
278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal/**
288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Tests that Android Mock provides correct mocks when running on a Dalvik VM.
298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal *
308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * @author swoodward (Stephen Woodward)
318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal */
328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalpublic class MockingTest extends TestCase {
338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal  /**
348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal   * Test that an SDK class is mocked correctly, that is to say the mock
358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal   * comes from the pre-generated set, and it corresponds to the correct
368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal   * runtime environment
378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal   */
388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal  @UsesMocks(Context.class)
398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal  public void testFrameworkMock() {
408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    Context mockContext = AndroidMock.createMock(Context.class);
418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    String packageName = mockContext.getClass().getPackage().getName();
428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    assertEquals(SdkVersion.getCurrentVersion().getPackagePrefix(),
438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal        packageName.substring(0, packageName.indexOf('.') + 1));
448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal  }
458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal
468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal  /**
478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal   * Test that a non-SDK class is mocked correctly
488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal   */
498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal  @UsesMocks(ClassToMock.class)
508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal  public void testNormalMock() {
518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    ClassToMock myMockClass = AndroidMock.createMock(ClassToMock.class);
528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    AndroidMock.expect(myMockClass.getString()).andReturn(
538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal        "I'm the king of the world, king of the -- d'oh!");
548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    AndroidMock.expect(myMockClass.getInt()).andReturn(42);
558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    AndroidMock.replay(myMockClass);
568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    assertEquals("I'm the king of the world, king of the -- d'oh!",
578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal        myMockClass.getString());
588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    assertEquals(42, myMockClass.getInt());
598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal    AndroidMock.verify(myMockClass);
608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal  }
618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal}
628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal
63