blob: e42ab3c27b0ae4f032c60005c7b43a61f432d247 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "tests/common/path_sink.h"
#include <gtest/gtest.h>
#include <cmath>
#include "tests/common/path_sink_test_utils.h"
TEST(PathSink, TestConvenienceMethods)
{
RecordingPathSink sink;
sink.begin();
sink.addMoveTo(1., 2.);
sink.addLineTo(3., 4.);
sink.addQuadTo(5., 6., 7., 8.);
sink.addCubicTo(9., 10., 11., 12., 13., 14.);
sink.addRatQuadTo(15., 16., 17., 18., 0.1);
sink.addRatCubicTo(19., 20., 21., 22., 23., 24., 0.2, 0.3);
EXPECT_TRUE(sink.end());
ASSERT_EQ(sink.commands.size(), 8u);
// clang-format off
static const char kExpected[] =
"BEGIN;"
"MOVE_TO(1 2);"
"LINE_TO(3 4);"
"QUAD_TO(5 6 7 8);"
"CUBIC_TO(9 10 11 12 13 14);"
"RAT_QUAD_TO(15 16 17 18 0.1);"
"RAT_CUBIC_TO(19 20 21 22 23 24 0.2 0.3);"
"END";
// clang-format on
EXPECT_STREQ(sink.to_string().c_str(), kExpected);
}
TEST(PathSink, TestArcTo)
{
RecordingPathSink sink;
sink.begin();
sink.addMoveTo(1., 0.);
sink.addArcTo(0., 0., 1., 1., 0., 0., M_PI * 2); // Full unit circle.
EXPECT_TRUE(sink.end());
// clang-format off
static const char kExpected[] =
"BEGIN;MOVE_TO(1 0);"
"RAT_QUAD_TO(1 1 0 1 0.707107);"
"RAT_QUAD_TO(-1 1 -1 0 0.707107);"
"RAT_QUAD_TO(-1 -1 0 -1 0.707107);"
"RAT_QUAD_TO(1 -1 1 0 0.707107);"
"END";
// clang-format on
EXPECT_STREQ(sink.to_string().c_str(), kExpected);
}
TEST(PathSink, TestSvgArcTo)
{
RecordingPathSink sink;
static const double dx = sqrt(2) / 2.;
sink.begin();
sink.addMoveTo(1., 0.);
sink.addSvgArcTo(1., 0., -dx, -dx, 1., 1., 0., true, true);
EXPECT_TRUE(sink.end());
// clang-format off
static const char kExpected[] =
"BEGIN;MOVE_TO(1 0);"
"RAT_QUAD_TO(1 1 0 1 0.707107);"
"RAT_QUAD_TO(-1 1 -1 0 0.707107);"
"RAT_QUAD_TO(-1 -0.414214 -0.707107 -0.707107 0.92388);"
"END";
// clang-format on
EXPECT_STREQ(sink.to_string().c_str(), kExpected);
}