/* * 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 using namespace skottie; namespace { class FakeScalarExpressionEvaluator : public ExpressionEvaluator { public: float evaluate(float t) override { return 7.0f; } }; class FakeExpressionManager : public ExpressionManager { public: sk_sp> createNumberExpressionEvaluator( const char expression[]) override { return sk_make_sp(); } sk_sp> createStringExpressionEvaluator( const char expression[]) override { return nullptr; } sk_sp>> createArrayExpressionEvaluator( const char expression[]) override { return nullptr; } }; class FakePropertyObserver : public PropertyObserver { public: void onOpacityProperty(const char node_name[], const LazyHandle& opacity_handle) override { opacity_handle_.reset(opacity_handle().release()); } std::unique_ptr 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(); auto observer = sk_make_sp(); 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)); }