blob: d78ac1f58145be55324822cd0be2d9ec20fb3032 [file] [log] [blame]
// Copyright 2020 The Chromium 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 <string>
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/mojom/handwriting/handwriting.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_handwriting_drawing_segment.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_handwriting_feature_query.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_handwriting_feature_query_result.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_handwriting_hints.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_handwriting_point.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_handwriting_prediction.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_handwriting_segment.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_handwriting_stroke.h"
#include "third_party/blink/renderer/modules/handwriting/handwriting_type_converters.h"
namespace blink {
using handwriting::mojom::blink::HandwritingDrawingSegmentPtr;
using handwriting::mojom::blink::HandwritingFeatureQueryPtr;
using handwriting::mojom::blink::HandwritingFeatureQueryResultPtr;
using handwriting::mojom::blink::HandwritingFeatureStatus;
using handwriting::mojom::blink::HandwritingHintsPtr;
using handwriting::mojom::blink::HandwritingPointPtr;
using handwriting::mojom::blink::HandwritingPredictionPtr;
using handwriting::mojom::blink::HandwritingSegmentPtr;
using handwriting::mojom::blink::HandwritingStrokePtr;
TEST(HandwritingTypeConvertersTest, IdlHandwritingPointToMojo) {
auto* idl_point = blink::HandwritingPoint::Create();
idl_point->setX(1.1);
idl_point->setY(2.3);
idl_point->setT(345);
auto mojo_point = mojo::ConvertTo<HandwritingPointPtr>(idl_point);
ASSERT_FALSE(mojo_point.is_null());
EXPECT_NEAR(mojo_point->location.x(), 1.1, 1e-5);
EXPECT_NEAR(mojo_point->location.y(), 2.3, 1e-5);
EXPECT_EQ(mojo_point->t.InMilliseconds(), 345);
}
TEST(HandwritingTypeConvertersTest, IdlHandwritingStrokeToMojo) {
auto* idl_stroke = blink::HandwritingStroke::Create();
auto* idl_point1 = blink::HandwritingPoint::Create();
idl_point1->setX(0.1);
idl_point1->setY(0.2);
idl_point1->setT(123);
auto* idl_point2 = blink::HandwritingPoint::Create();
idl_stroke->addPoint(idl_point1);
idl_point2->setX(1.1);
idl_point2->setY(1.2);
idl_point2->setT(456);
idl_stroke->addPoint(idl_point2);
auto mojo_stroke = mojo::ConvertTo<HandwritingStrokePtr>(idl_stroke);
ASSERT_FALSE(mojo_stroke.is_null());
ASSERT_EQ(mojo_stroke->points.size(), 2u);
EXPECT_NEAR(mojo_stroke->points[0]->location.x(), 0.1, 1e-5);
EXPECT_NEAR(mojo_stroke->points[0]->location.y(), 0.2, 1e-5);
EXPECT_EQ(mojo_stroke->points[0]->t.InMilliseconds(), 123);
EXPECT_NEAR(mojo_stroke->points[1]->location.x(), 1.1, 1e-5);
EXPECT_NEAR(mojo_stroke->points[1]->location.y(), 1.2, 1e-5);
EXPECT_EQ(mojo_stroke->points[1]->t.InMilliseconds(), 456);
}
TEST(HandwritingTypeConvertersTest, IdlHandwritingHintsToMojo) {
auto* idl_hints = blink::HandwritingHints::Create();
idl_hints->setRecognitionType("recognition type");
idl_hints->setInputType("input type");
idl_hints->setTextContext("text context");
idl_hints->setAlternatives(10);
auto mojo_hints = mojo::ConvertTo<HandwritingHintsPtr>(idl_hints);
ASSERT_FALSE(mojo_hints.is_null());
EXPECT_EQ(mojo_hints->recognition_type, "recognition type");
EXPECT_EQ(mojo_hints->input_type, "input type");
EXPECT_EQ(mojo_hints->text_context, "text context");
EXPECT_EQ(mojo_hints->alternatives, 10u);
}
TEST(HandwritingTypeConvertersTest, IdlHandwritingFeatureQueryToMojo) {
V8TestingScope v8_testing_scope;
auto* idl_query = blink::HandwritingFeatureQuery::Create();
idl_query->setLanguages({"en", "fr"});
idl_query->setAlternatives(
blink::ScriptValue::From(v8_testing_scope.GetScriptState(), 10));
// Intentionally does not set `segmentationResult`.
auto mojo_query = mojo::ConvertTo<HandwritingFeatureQueryPtr>(idl_query);
ASSERT_FALSE(mojo_query.is_null());
ASSERT_EQ(mojo_query->languages.size(), 2u);
EXPECT_EQ(mojo_query->languages[0], "en");
EXPECT_EQ(mojo_query->languages[1], "fr");
EXPECT_EQ(mojo_query->alternatives, true);
EXPECT_EQ(mojo_query->segmentation_result, false);
}
TEST(HandwritingTypeConvertersTest,
IdlEmptyLanguageHandwritingFeatureQueryToMojo) {
V8TestingScope v8_testing_scope;
auto* idl_query = blink::HandwritingFeatureQuery::Create();
// Intentionally does not set `languages`.
// Intentionally does not set `alternatives`.
idl_query->setSegmentationResult(
blink::ScriptValue::From(v8_testing_scope.GetScriptState(), "a"));
auto mojo_query = mojo::ConvertTo<HandwritingFeatureQueryPtr>(idl_query);
ASSERT_FALSE(mojo_query.is_null());
ASSERT_EQ(mojo_query->languages.size(), 0u);
EXPECT_EQ(mojo_query->alternatives, false);
EXPECT_EQ(mojo_query->segmentation_result, true);
}
TEST(HandwritingTypeConvertersTest, MojoHandwritingPointToIdl) {
auto mojo_point = handwriting::mojom::blink::HandwritingPoint::New();
mojo_point->location = gfx::PointF(0.3, 0.4);
mojo_point->t = base::TimeDelta::FromMilliseconds(123);
auto* idl_point = mojo::ConvertTo<blink::HandwritingPoint*>(mojo_point);
ASSERT_NE(idl_point, nullptr);
EXPECT_NEAR(idl_point->x(), 0.3, 1e-5);
EXPECT_NEAR(idl_point->y(), 0.4, 1e-5);
EXPECT_EQ(idl_point->t(), 123u);
}
TEST(HandwritingTypeConvertersTest, MojoHandwritingStrokeToIdl) {
auto mojo_stroke = handwriting::mojom::blink::HandwritingStroke::New();
auto mojo_point1 = handwriting::mojom::blink::HandwritingPoint::New();
mojo_point1->location = gfx::PointF(2.1, 2.2);
mojo_point1->t = base::TimeDelta::FromMilliseconds(321);
mojo_stroke->points.push_back(std::move(mojo_point1));
auto mojo_point2 = handwriting::mojom::blink::HandwritingPoint::New();
mojo_point2->location = gfx::PointF(3.1, 3.2);
mojo_point2->t = base::TimeDelta::FromMilliseconds(456);
mojo_stroke->points.push_back(std::move(mojo_point2));
auto* idl_stroke = mojo::ConvertTo<blink::HandwritingStroke*>(mojo_stroke);
ASSERT_NE(idl_stroke, nullptr);
ASSERT_EQ(idl_stroke->getPoints().size(), 2u);
EXPECT_NEAR(idl_stroke->getPoints()[0]->x(), 2.1, 1e-5);
EXPECT_NEAR(idl_stroke->getPoints()[0]->y(), 2.2, 1e-5);
EXPECT_EQ(idl_stroke->getPoints()[0]->t(), 321u);
EXPECT_NEAR(idl_stroke->getPoints()[1]->x(), 3.1, 1e-5);
EXPECT_NEAR(idl_stroke->getPoints()[1]->y(), 3.2, 1e-5);
EXPECT_EQ(idl_stroke->getPoints()[1]->t(), 456u);
}
TEST(HandwritingTypeConvertersTest, MojoHandwritingFeatureQueryResultIdl) {
auto mojo_query_result =
handwriting::mojom::blink::HandwritingFeatureQueryResult::New();
mojo_query_result->languages = HandwritingFeatureStatus::kNotQueried;
mojo_query_result->alternatives = HandwritingFeatureStatus::kSupported;
mojo_query_result->segmentation_result =
HandwritingFeatureStatus::kNotSupported;
auto* idl_query_result =
mojo::ConvertTo<blink::HandwritingFeatureQueryResult*>(mojo_query_result);
ASSERT_NE(idl_query_result, nullptr);
EXPECT_FALSE(idl_query_result->hasLanguages());
ASSERT_TRUE(idl_query_result->hasAlternatives());
EXPECT_TRUE(idl_query_result->alternatives());
ASSERT_TRUE(idl_query_result->hasSegmentationResult());
EXPECT_FALSE(idl_query_result->segmentationResult());
}
TEST(HandwritingTypeConvertersTest, MojoHandwritingDrawingSegmentIdl) {
auto mojo_drawing_segment =
handwriting::mojom::blink::HandwritingDrawingSegment::New();
mojo_drawing_segment->stroke_index = 123u;
mojo_drawing_segment->begin_point_index = 10u;
mojo_drawing_segment->end_point_index = 20u;
auto* idl_drawing_segment =
mojo_drawing_segment.To<blink::HandwritingDrawingSegment*>();
EXPECT_EQ(idl_drawing_segment->strokeIndex(), 123u);
EXPECT_EQ(idl_drawing_segment->beginPointIndex(), 10u);
EXPECT_EQ(idl_drawing_segment->endPointIndex(), 20u);
}
TEST(HandwritingTypeConvertersTest, MojoHandwritingSegmentIdl) {
auto mojo_drawing_segment =
handwriting::mojom::blink::HandwritingDrawingSegment::New();
mojo_drawing_segment->stroke_index = 321u;
mojo_drawing_segment->begin_point_index = 30u;
mojo_drawing_segment->end_point_index = 40u;
auto mojo_segment = handwriting::mojom::blink::HandwritingSegment::New();
mojo_segment->grapheme = "The grapheme";
mojo_segment->begin_index = 5u;
mojo_segment->end_index = 6u;
mojo_segment->drawing_segments.push_back(std::move(mojo_drawing_segment));
auto* idl_segment = mojo_segment.To<blink::HandwritingSegment*>();
EXPECT_EQ(idl_segment->grapheme(), "The grapheme");
EXPECT_EQ(idl_segment->beginIndex(), 5u);
EXPECT_EQ(idl_segment->endIndex(), 6u);
ASSERT_EQ(idl_segment->drawingSegments().size(), 1u);
EXPECT_EQ(idl_segment->drawingSegments()[0]->strokeIndex(), 321u);
EXPECT_EQ(idl_segment->drawingSegments()[0]->beginPointIndex(), 30u);
EXPECT_EQ(idl_segment->drawingSegments()[0]->endPointIndex(), 40u);
}
TEST(HandwritingTypeConvertersTest, MojoHandwritingPredictionIdl) {
auto mojo_drawing_segment =
handwriting::mojom::blink::HandwritingDrawingSegment::New();
mojo_drawing_segment->stroke_index = 456u;
mojo_drawing_segment->begin_point_index = 7u;
mojo_drawing_segment->end_point_index = 8u;
auto mojo_segment = handwriting::mojom::blink::HandwritingSegment::New();
mojo_segment->grapheme = "The grapheme";
mojo_segment->begin_index = 100u;
mojo_segment->end_index = 200u;
mojo_segment->drawing_segments.push_back(std::move(mojo_drawing_segment));
auto mojo_prediction =
handwriting::mojom::blink::HandwritingPrediction::New();
mojo_prediction->text = "The prediction";
mojo_prediction->segmentation_result.push_back(std::move(mojo_segment));
auto* idl_prediction = mojo_prediction.To<blink::HandwritingPrediction*>();
EXPECT_EQ(idl_prediction->text(), "The prediction");
ASSERT_EQ(idl_prediction->segmentationResult().size(), 1u);
EXPECT_EQ(idl_prediction->segmentationResult()[0]->grapheme(),
"The grapheme");
EXPECT_EQ(idl_prediction->segmentationResult()[0]->beginIndex(), 100u);
EXPECT_EQ(idl_prediction->segmentationResult()[0]->endIndex(), 200u);
ASSERT_EQ(idl_prediction->segmentationResult()[0]->drawingSegments().size(),
1u);
EXPECT_EQ(idl_prediction->segmentationResult()[0]
->drawingSegments()[0]
->strokeIndex(),
456u);
EXPECT_EQ(idl_prediction->segmentationResult()[0]
->drawingSegments()[0]
->beginPointIndex(),
7u);
EXPECT_EQ(idl_prediction->segmentationResult()[0]
->drawingSegments()[0]
->endPointIndex(),
8u);
}
} // namespace blink