blob: fd6e2f0d39d60dea3b4cb8e73e812ccbfbc916cc [file] [log] [blame]
// Copyright 2021 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 "ash/projector/projector_metadata_model.h"
#include <memory>
#include <string>
#include <vector>
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/strings/stringprintf.h"
#include "base/values.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace ash {
namespace {
constexpr char kSerializedKeyIdeaTemplate[] = R"({
"endOffset": %i,
"startOffset": %i,
"text": "%s"
})";
constexpr char kSerializedTranscriptTemplate[] = R"({
"endOffset": %i,
"startOffset": %i,
"text": "%s",
"wordAlignment": %s
})";
void AssertSerializedString(const std::string& expected,
const std::string& actual) {
absl::optional<base::Value> expected_value = base::JSONReader::Read(expected);
ASSERT_TRUE(expected_value);
std::string expected_serialized_value;
base::JSONWriter::Write(expected_value.value(), &expected_serialized_value);
EXPECT_EQ(expected_serialized_value, actual);
}
std::string BuildKeyIdeaJson(int start_offset,
int end_offset,
const std::string& text) {
return base::StringPrintf(kSerializedKeyIdeaTemplate, end_offset,
start_offset, text.c_str());
}
std::string BuildTranscriptJson(int start_offset,
int end_offset,
const std::string& text,
const std::string& words_alignments_str) {
return base::StringPrintf(kSerializedTranscriptTemplate, end_offset,
start_offset, text.c_str(),
words_alignments_str.c_str());
}
} // namespace
class ProjectorKeyIdeaTest : public testing::Test {
public:
ProjectorKeyIdeaTest() = default;
ProjectorKeyIdeaTest(const ProjectorKeyIdeaTest&) = delete;
ProjectorKeyIdeaTest& operator=(const ProjectorKeyIdeaTest&) = delete;
};
TEST_F(ProjectorKeyIdeaTest, ToJson) {
ProjectorKeyIdea key_idea(
/*start_time=*/base::TimeDelta::FromMilliseconds(1000),
/*end_time=*/base::TimeDelta::FromMilliseconds(3000));
std::string key_idea_str;
base::JSONWriter::Write(key_idea.ToJson(), &key_idea_str);
AssertSerializedString(BuildKeyIdeaJson(1000, 3000, std::string()),
key_idea_str);
}
TEST_F(ProjectorKeyIdeaTest, ToJsonWithText) {
ProjectorKeyIdea key_idea(
/*start_time=*/base::TimeDelta::FromMilliseconds(1000),
/*end_time=*/base::TimeDelta::FromMilliseconds(3000), "Key idea text");
std::string key_idea_str;
base::JSONWriter::Write(key_idea.ToJson(), &key_idea_str);
AssertSerializedString(BuildKeyIdeaJson(1000, 3000, "Key idea text"),
key_idea_str);
}
class ProjectorTranscriptTest : public testing::Test {
public:
ProjectorTranscriptTest() = default;
ProjectorTranscriptTest(const ProjectorTranscriptTest&) = delete;
ProjectorTranscriptTest& operator=(const ProjectorTranscriptTest&) = delete;
};
TEST_F(ProjectorTranscriptTest, ToJson) {
ProjectorTranscript transcript(
/*start_time=*/base::TimeDelta::FromMilliseconds(1000),
/*end_time=*/base::TimeDelta::FromMilliseconds(3000), "transcript text",
{base::TimeDelta::FromMilliseconds(1000),
base::TimeDelta::FromMilliseconds(2000)});
std::string transcript_str;
base::JSONWriter::Write(transcript.ToJson(), &transcript_str);
AssertSerializedString(
BuildTranscriptJson(1000, 3000, "transcript text", "[1000,2000]"),
transcript_str);
}
class ProjectorMetadataTest : public testing::Test {
public:
ProjectorMetadataTest() = default;
ProjectorMetadataTest(const ProjectorMetadataTest&) = delete;
ProjectorMetadataTest& operator=(const ProjectorMetadataTest&) = delete;
};
TEST_F(ProjectorMetadataTest, Serialize) {
const char kExpectedMetaData[] = R"({
"name": "Screen Recording 1",
"captions": [
{
"endOffset": 3000,
"startOffset": 1000,
"text": "transcript text",
"wordAlignment": [1000, 2000]
},
{
"endOffset": 5000,
"startOffset": 3000,
"text": "transcript text 2",
"wordAlignment":[3200, 4200, 4500]
}
],
"tableOfContent":[
{
"endOffset": 5000,
"startOffset": 3000,
"text": ""
}
]
})";
ProjectorMetadata metadata;
metadata.SetName("Screen Recording 1");
metadata.AddTranscript(std::make_unique<ProjectorTranscript>(
/*start_time=*/base::TimeDelta::FromMilliseconds(1000),
/*end_time=*/base::TimeDelta::FromMilliseconds(3000), "transcript text",
std::initializer_list<base::TimeDelta>(
{base::TimeDelta::FromMilliseconds(1000),
base::TimeDelta::FromMilliseconds(2000)})));
metadata.MarkKeyIdea();
metadata.AddTranscript(std::make_unique<ProjectorTranscript>(
/*start_time=*/base::TimeDelta::FromMilliseconds(3000),
/*end_time=*/base::TimeDelta::FromMilliseconds(5000), "transcript text 2",
std::initializer_list<base::TimeDelta>(
{base::TimeDelta::FromMilliseconds(3200),
base::TimeDelta::FromMilliseconds(4200),
base::TimeDelta::FromMilliseconds(4500)})));
AssertSerializedString(kExpectedMetaData, metadata.Serialize());
}
} // namespace ash