1cf2c8d6ec
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-override.html Adds override (introduced in C++11) to overridden virtual functions and removes virtual from those functions as it is not required. virtual on non base class implementations was used to help indicate to the user that a function was virtual. C++ compilers did not use the presence of this to signify an overridden function. Change-Id: If66d8919358f72a4035190caf8d7569268037a9a Reviewed-on: https://skia-review.googlesource.com/c/skia/+/310160 Commit-Queue: Mike Klein <mtklein@google.com> Auto-Submit: John Stiles <johnstiles@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
135 lines
3.9 KiB
C++
135 lines
3.9 KiB
C++
/*
|
|
* Copyright 2020 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "modules/skottie/include/Skottie.h"
|
|
|
|
#include "tests/Test.h"
|
|
|
|
using namespace skottie;
|
|
using namespace skresources;
|
|
|
|
DEF_TEST(Skottie_AudioLayer, r) {
|
|
static constexpr char json[] =
|
|
R"({
|
|
"v": "5.2.1",
|
|
"w": 100,
|
|
"h": 100,
|
|
"fr": 10,
|
|
"ip": 0,
|
|
"op": 100,
|
|
"assets": [
|
|
{
|
|
"id": "audio_0",
|
|
"p" : "audio.mp3",
|
|
"u" : "assets/"
|
|
}
|
|
],
|
|
"layers": [
|
|
{
|
|
"ty" : 6,
|
|
"ind" : 0,
|
|
"ip" : 20,
|
|
"op" : 70,
|
|
"refId": "audio_0"
|
|
},
|
|
{
|
|
"ty" : 6,
|
|
"ind" : 0,
|
|
"ip" : 50,
|
|
"op" : 80,
|
|
"refId": "audio_0"
|
|
},
|
|
{
|
|
"ty": 1,
|
|
"ip": 0,
|
|
"op": 100,
|
|
"sw": 100,
|
|
"sh": 100,
|
|
"sc": "#ffffff"
|
|
}
|
|
]
|
|
})";
|
|
|
|
class MockTracker final : public ExternalTrackAsset {
|
|
public:
|
|
bool isPlaying() const { return fCurrentTime >= 0; }
|
|
float currentTime() const { return fCurrentTime; }
|
|
|
|
private:
|
|
void seek(float t) override {
|
|
fCurrentTime = t;
|
|
}
|
|
|
|
float fCurrentTime = 0;
|
|
};
|
|
|
|
class MockResourceProvider final : public ResourceProvider {
|
|
public:
|
|
explicit MockResourceProvider(skiatest::Reporter* r) : fReporter(r) {}
|
|
|
|
const std::vector<sk_sp<MockTracker>>& tracks() const { return fTracks; }
|
|
|
|
private:
|
|
sk_sp<ExternalTrackAsset> loadAudioAsset(const char path[],
|
|
const char name[],
|
|
const char id[]) override {
|
|
REPORTER_ASSERT(fReporter, !strcmp(path, "assets/"));
|
|
REPORTER_ASSERT(fReporter, !strcmp(name, "audio.mp3"));
|
|
REPORTER_ASSERT(fReporter, !strcmp(id , "audio_0"));
|
|
|
|
fTracks.push_back(sk_make_sp<MockTracker>());
|
|
|
|
return fTracks.back();
|
|
}
|
|
|
|
skiatest::Reporter* fReporter;
|
|
std::vector<sk_sp<MockTracker>> fTracks;
|
|
};
|
|
|
|
SkMemoryStream stream(json, strlen(json));
|
|
auto rp = sk_make_sp<MockResourceProvider>(r);
|
|
|
|
auto skottie = skottie::Animation::Builder()
|
|
.setResourceProvider(rp)
|
|
.make(&stream);
|
|
|
|
const auto& tracks = rp->tracks();
|
|
|
|
REPORTER_ASSERT(r, skottie);
|
|
REPORTER_ASSERT(r, tracks.size() == 2);
|
|
|
|
skottie->seekFrame(0);
|
|
REPORTER_ASSERT(r, !tracks[0]->isPlaying());
|
|
REPORTER_ASSERT(r, !tracks[1]->isPlaying());
|
|
|
|
skottie->seekFrame(20);
|
|
REPORTER_ASSERT(r, tracks[0]->isPlaying());
|
|
REPORTER_ASSERT(r, !tracks[1]->isPlaying());
|
|
REPORTER_ASSERT(r, tracks[0]->currentTime() == 0);
|
|
|
|
skottie->seekFrame(50);
|
|
REPORTER_ASSERT(r, tracks[0]->isPlaying());
|
|
REPORTER_ASSERT(r, tracks[1]->isPlaying());
|
|
REPORTER_ASSERT(r, tracks[0]->currentTime() == 3);
|
|
REPORTER_ASSERT(r, tracks[1]->currentTime() == 0);
|
|
|
|
skottie->seekFrame(70);
|
|
REPORTER_ASSERT(r, tracks[0]->isPlaying());
|
|
REPORTER_ASSERT(r, tracks[1]->isPlaying());
|
|
REPORTER_ASSERT(r, tracks[0]->currentTime() == 5);
|
|
REPORTER_ASSERT(r, tracks[1]->currentTime() == 2);
|
|
|
|
skottie->seekFrame(80);
|
|
REPORTER_ASSERT(r, !tracks[0]->isPlaying());
|
|
REPORTER_ASSERT(r, tracks[1]->isPlaying());
|
|
REPORTER_ASSERT(r, tracks[1]->currentTime() == 3);
|
|
|
|
skottie->seekFrame(100);
|
|
REPORTER_ASSERT(r, !tracks[0]->isPlaying());
|
|
REPORTER_ASSERT(r, !tracks[1]->isPlaying());
|
|
}
|