packages/apps/DocumentsUI/tests/common/com/android/documentsui/services/TestCopyJobProcessTracker.java

95 lines
3.2 KiB
Java

/*
* Copyright (C) 2018 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.android.documentsui.services;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import android.app.Notification;
import com.android.documentsui.services.CopyJob.CopyJobProgressTracker;
import java.util.function.Function;
import java.util.function.LongSupplier;
class TestCopyJobProcessTracker<T extends CopyJobProgressTracker> {
private T mProcessTracker;
private Notification.Builder mProgressBuilder;
private final Function<Double, String> mProgressFormatter;
private final Function<Long, String> mRemainTimeFormatter;
private static class TestLongSupplier implements LongSupplier {
long mValue = 0;
boolean mCalled;
@Override
public long getAsLong() {
mCalled = true;
return mValue;
}
}
private TestLongSupplier mTimeSupplier = new TestLongSupplier();
TestCopyJobProcessTracker(Class<T> trackerClass,
long requiredData, CopyJob job, Function<Double, String> progressFormatter,
Function<Long, String> remainTimeFormatter) throws Exception {
mProcessTracker = trackerClass.getDeclaredConstructor(long.class,
LongSupplier.class).newInstance(requiredData, mTimeSupplier);
mProgressBuilder = job.mProgressBuilder;
mProgressFormatter = progressFormatter;
mRemainTimeFormatter = remainTimeFormatter;
}
T getProcessTracker() {
return mProcessTracker;
}
void assertProgressTrackStarted() {
assertTrue(mTimeSupplier.mCalled);
}
void assertStartedProgressEquals(int expectedProgress) {
assertEquals(expectedProgress, (int) mProcessTracker.getProgress());
}
void assertStartedRemainingTimeEquals(long expectedRemainingTime) {
assertEquals(expectedRemainingTime, mProcessTracker.getRemainingTimeEstimate());
}
void updateProgressAndRemainingTime(long elapsedTime) {
mTimeSupplier.mValue = elapsedTime;
mProcessTracker.update(mProgressBuilder, mRemainTimeFormatter);
}
void assertProgressEquals(double progress) {
assertEquals(mProgressFormatter.apply(progress),
mProgressBuilder.build().extras.get(Notification.EXTRA_SUB_TEXT));
}
void assertReminingTimeEquals(long remainingTime) {
assertEquals(mRemainTimeFormatter.apply(remainingTime),
mProgressBuilder.build().extras.get(Notification.EXTRA_TEXT));
}
void assertNoRemainingTime() {
assertNull(mProgressBuilder.build().extras.get(Notification.EXTRA_TEXT));
}
}