/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.android.glass.sample.timer;
import android.test.AndroidTestCase;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.view.SurfaceHolder;
import android.view.Surface;
/**
* Unit tests for {@link TimerDrawer}.
*/
public class TimerDrawerTest extends AndroidTestCase {
private TimerDrawer mDrawer;
private TimerView mView;
private int mCanvasLockedCount;
private int mCanvasUnlockedCount;
private int mDrawCount;
/** Simple {@link SurfaceHolder} implementation for testing. */
private final SurfaceHolder mHolder = new SurfaceHolder() {
Canvas mCanvas = new Canvas();
@Override
public void addCallback(SurfaceHolder.Callback callback) {
// Nothing to do here.
}
@Override
public Surface getSurface() {
return null;
}
@Override
public Rect getSurfaceFrame() {
return null;
}
@Override
public boolean isCreating() {
return false;
}
@Override
public Canvas lockCanvas() {
++mCanvasLockedCount;
return mCanvas;
}
@Override
public Canvas lockCanvas(Rect rect) {
return lockCanvas();
}
@Override
public void removeCallback(SurfaceHolder.Callback callback) {
// Nothing to do here.
}
@Override
public void setFixedSize(int width, int height) {
// Nothing to do here.
}
@Override
public void setFormat(int format) {
// Nothing to do here.
}
@Override
public void setKeepScreenOn(boolean keepScreenOn) {
// Nothing to do here.
}
@Override
public void setSizeFromLayout() {
// Nothing to do here.
}
@Override
public void setType(int type) {
// Nothing to do here.
}
@Override
public void unlockCanvasAndPost(Canvas canvas) {
assertEquals(mCanvas, canvas);
++mCanvasUnlockedCount;
}
};
@Override
protected void setUp() throws Exception {
super.setUp();
mView = new TimerView(getContext()) {
@Override
public void draw(Canvas canvas) {
++mDrawCount;
}
};
mDrawer = new TimerDrawer(mView);
mCanvasLockedCount = 0;
mCanvasUnlockedCount = 0;
mDrawCount = 0;
}
public void testConstructorSetsListener() {
assertNotNull(mView.getListener());
}
public void testSurfaceChanged() {
int width = 640;
int height = 360;
// Ensure the test is not a no-op.
assertEquals(0, mView.getWidth());
assertEquals(0, mView.getHeight());
mDrawer.surfaceChanged(mHolder, 0, width, height);
assertEquals(0, mDrawCount);
assertEquals(width, mView.getWidth());
assertEquals(height, mView.getHeight());
}
public void testSurfaceCreatedDrawsOnce() {
mDrawer.surfaceCreated(mHolder);
assertEquals(1, mDrawCount);
}
public void testSurfaceCreatedRenderingPaused() {
mDrawer.renderingPaused(mHolder, true);
assertEquals(0, mDrawCount);
mDrawer.surfaceCreated(mHolder);
assertEquals(1, mDrawCount);
}
public void testSurfaceDestroyed() {
mDrawer.surfaceDestroyed(mHolder);
assertEquals(0, mDrawCount);
}
public void testRenderingPausedFalseNoSurface() {
mDrawer.renderingPaused(mHolder, false);
assertEquals(0, mDrawCount);
}
public void testRenderingPausedFalseWithSurface() {
mDrawer.surfaceCreated(mHolder);
assertEquals(1, mDrawCount);
mDrawer.renderingPaused(mHolder, false);
assertEquals(2, mDrawCount);
}
public void testRenderingPausedTrue() {
mDrawer.surfaceCreated(mHolder);
assertEquals(1, mDrawCount);
// Test that no other calls to mView.draw() occurred.
mDrawer.renderingPaused(mHolder, true);
assertEquals(1, mDrawCount);
}
public void testDrawProperlyLocksAndUnlocksCanvas() {
// This also calls mDrawer.draw();
mDrawer.surfaceCreated(mHolder);
assertEquals(1, mDrawCount);
assertEquals(1, mCanvasLockedCount);
assertEquals(1, mCanvasUnlockedCount);
}
public void testListenerNoSurfaceDoesNotCallDraw() {
mView.getListener().onChange();
assertEquals(0, mDrawCount);
}
public void testListenerWithSurfaceCallsDraw() {
mDrawer.surfaceCreated(mHolder);
assertEquals(1, mDrawCount);
mView.getListener().onChange();
assertEquals(2, mDrawCount);
}
}