139 lines
3.7 KiB
C++
139 lines
3.7 KiB
C++
|
/*
|
||
|
* Copyright 2021 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 "modules/skottie/include/SkottieProperty.h"
|
||
|
#include "tests/Test.h"
|
||
|
#include <iostream>
|
||
|
|
||
|
using namespace skottie;
|
||
|
|
||
|
namespace {
|
||
|
|
||
|
class FakeScalarExpressionEvaluator : public ExpressionEvaluator<float> {
|
||
|
public:
|
||
|
float evaluate(float t) override {
|
||
|
return 7.0f;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class FakeExpressionManager : public ExpressionManager {
|
||
|
public:
|
||
|
sk_sp<ExpressionEvaluator<float>> createNumberExpressionEvaluator(
|
||
|
const char expression[]) override {
|
||
|
return sk_make_sp<FakeScalarExpressionEvaluator>();
|
||
|
}
|
||
|
|
||
|
sk_sp<ExpressionEvaluator<SkString>> createStringExpressionEvaluator(
|
||
|
const char expression[]) override {
|
||
|
return nullptr;
|
||
|
}
|
||
|
|
||
|
sk_sp<ExpressionEvaluator<std::vector<float>>> createArrayExpressionEvaluator(
|
||
|
const char expression[]) override {
|
||
|
return nullptr;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class FakePropertyObserver : public PropertyObserver {
|
||
|
public:
|
||
|
void onOpacityProperty(const char node_name[],
|
||
|
const LazyHandle<OpacityPropertyHandle>& opacity_handle) override {
|
||
|
opacity_handle_.reset(opacity_handle().release());
|
||
|
}
|
||
|
|
||
|
std::unique_ptr<OpacityPropertyHandle> opacity_handle_;
|
||
|
};
|
||
|
} // namespace
|
||
|
|
||
|
DEF_TEST(Skottie_ScalarExpression, r) {
|
||
|
static constexpr char json[] =
|
||
|
R"({
|
||
|
"v": "5.2.1",
|
||
|
"w": 100,
|
||
|
"h": 100,
|
||
|
"fr": 10,
|
||
|
"ip": 0,
|
||
|
"op": 100,
|
||
|
"layers": [
|
||
|
{
|
||
|
"ip": 0,
|
||
|
"op": 100,
|
||
|
"ty": 1,
|
||
|
"nm": "My Layer",
|
||
|
"sr": 1,
|
||
|
"ks": {
|
||
|
"o": {
|
||
|
"a": 0,
|
||
|
"k": 100,
|
||
|
"ix": 11,
|
||
|
"x": "fake; return value is specified by the FakeScalarExpressionEvaluator."
|
||
|
},
|
||
|
"r": {
|
||
|
"a": 0,
|
||
|
"k": 0,
|
||
|
"ix": 10
|
||
|
},
|
||
|
"p": {
|
||
|
"a": 0,
|
||
|
"k": [
|
||
|
50,
|
||
|
50,
|
||
|
0
|
||
|
],
|
||
|
"ix": 2,
|
||
|
"l": 2
|
||
|
},
|
||
|
"a": {
|
||
|
"a": 0,
|
||
|
"k": [
|
||
|
50,
|
||
|
50,
|
||
|
0
|
||
|
],
|
||
|
"ix": 1,
|
||
|
"l": 2
|
||
|
},
|
||
|
"s": {
|
||
|
"a": 0,
|
||
|
"k": [
|
||
|
100,
|
||
|
100,
|
||
|
100
|
||
|
],
|
||
|
"ix": 6,
|
||
|
"l": 2
|
||
|
}
|
||
|
},
|
||
|
"ao": 0,
|
||
|
"sw": 100,
|
||
|
"sh": 100,
|
||
|
"sc": "#51251d",
|
||
|
"st": 0,
|
||
|
"bm": 0
|
||
|
}
|
||
|
]
|
||
|
})";
|
||
|
|
||
|
SkMemoryStream stream(json, strlen(json));
|
||
|
|
||
|
auto em = sk_make_sp<FakeExpressionManager>();
|
||
|
auto observer = sk_make_sp<FakePropertyObserver>();
|
||
|
|
||
|
auto anim = Animation::Builder()
|
||
|
.setExpressionManager(em)
|
||
|
.setPropertyObserver(observer)
|
||
|
.make(&stream);
|
||
|
|
||
|
REPORTER_ASSERT(r, anim);
|
||
|
|
||
|
anim->seekFrameTime(0);
|
||
|
|
||
|
REPORTER_ASSERT(r, SkScalarNearlyEqual(observer->opacity_handle_->get(), 7.0f));
|
||
|
}
|