File: proofreader_test.cc

package info (click to toggle)
chromium 141.0.7390.107-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,254,812 kB
  • sloc: cpp: 35,264,957; ansic: 7,169,920; javascript: 4,250,185; python: 1,460,636; asm: 950,788; xml: 751,751; pascal: 187,972; sh: 89,459; perl: 88,691; objc: 79,953; sql: 53,924; cs: 44,622; fortran: 24,137; makefile: 22,319; tcl: 15,277; php: 14,018; yacc: 8,995; ruby: 7,553; awk: 3,720; lisp: 3,096; lex: 1,330; ada: 727; jsp: 228; sed: 36
file content (130 lines) | stat: -rw-r--r-- 5,164 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "third_party/blink/renderer/modules/ai/proofreader.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace blink {
namespace {

String ApplyCorrections(Vector<Correction> corrections, const String& input) {
  String result = "";
  uint32_t index = 0;
  for (const Correction& c : corrections) {
    auto start_index = c.error_start;
    auto end_index = c.error_end;
    if (index < start_index) {
      result = result + input.Substring(index, start_index - index);
    }
    result = result + c.correction;
    index = end_index;
  }
  if (index < input.length()) {
    result = result + input.Substring(index);
  }

  return result;
}

}  // namespace

TEST(GetProofreadingCorrections, SimpleReplacement) {
  const String kInput = "aple";
  const String kCorrectedInput = "apple";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, SimpleInsertion) {
  const String kInput = "I don't want do this.";
  const String kCorrectedInput = "I don't want to do this.";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, SimpleDeletion) {
  const String kInput = "Can you help me to do this?";
  const String kCorrectedInput = "Can you help me do this?";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, SimpleOrderSwapping) {
  const String kInput = "Why I can't use phone?";
  const String kCorrectedInput = "Why can't I use my phone?";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, MixedOperations) {
  const String kInput = "can you profread this fir me";
  const String kCorrectedInput = "Can you proofread this for me?";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, MultipleSentencesWithEmoji) {
  const String kInput =
      "Having walked the dog, the leash was still in my hand. Her, who is "
      "usually very calm, suddenly bolted towards the fence, nearly tripping I "
      "😢";
  const String kCorrectedInput =
      "Having walked the dog, I still had the leash in my hand. She, who is "
      "usually very calm, suddenly bolted towards the fence, nearly tripping "
      "me 😢";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, ComplicateSentenceWithHyphens) {
  const String kInput =
      "The critically-acclaimed – albeit controversial, docu-series explore "
      "the socio-economic ramifications of late-stage capitalism in "
      "post-industrial society's.";
  const String kCorrectedInput =
      "The critically acclaimed—albeit controversial—docuseries explores the "
      "socioeconomic ramifications of late-stage capitalism in post-industrial "
      "societies.";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, Numbers) {
  const String kInput = "this are my number: 12345678910";
  const String kCorrectedInput = "This is my number: 123-4567-8910.";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, NonUtf8Input) {
  const char16_t nonutf8_input[] = u"A\xD83D";
  const String kInput = String(nonutf8_input);
  const String kCorrectedInput = " ";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, NoChange) {
  const String kInput = "Hello world!";
  const String kCorrectedInput = "Hello world!";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, TrailingSpaces) {
  const String kInput = "Hello world  ";
  const String kCorrectedInput = "Hello world";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

TEST(GetProofreadingCorrections, LeadingSpaces) {
  const String kInput = "  Hello world.";
  const String kCorrectedInput = "Hello world.";
  auto list_of_corrections = GetCorrections(kInput, kCorrectedInput);
  EXPECT_EQ(ApplyCorrections(list_of_corrections, kInput), kCorrectedInput);
}

}  // namespace blink