15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(nona): Add more tests.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/ibus/ibus_text.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/ibus/ibus_object.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/message.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(IBusTextTest, WriteReadTest) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kSampleText[] = "Sample Text";
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const char kAnnotation[] = "Annotation";
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const char kDescriptionTitle[] = "Description Title";
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const char kDescriptionBody[] = "Description Body";
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const IBusText::UnderlineAttribute kSampleUnderlineAttribute1 = {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IBusText::IBUS_TEXT_UNDERLINE_SINGLE, 10, 20};
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const IBusText::UnderlineAttribute kSampleUnderlineAttribute2 = {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IBusText::IBUS_TEXT_UNDERLINE_DOUBLE, 11, 21};
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const IBusText::UnderlineAttribute kSampleUnderlineAttribute3 = {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IBusText::IBUS_TEXT_UNDERLINE_ERROR, 12, 22};
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const IBusText::SelectionAttribute kSampleSelectionAttribute = {30, 40};
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make IBusText
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBusText text;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  text.set_text(kSampleText);
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  text.set_annotation(kAnnotation);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  text.set_description_title(kDescriptionTitle);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  text.set_description_body(kDescriptionBody);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<IBusText::UnderlineAttribute>* underline_attributes =
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      text.mutable_underline_attributes();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  underline_attributes->push_back(kSampleUnderlineAttribute1);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  underline_attributes->push_back(kSampleUnderlineAttribute2);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  underline_attributes->push_back(kSampleUnderlineAttribute3);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<IBusText::SelectionAttribute>* selection_attributes =
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      text.mutable_selection_attributes();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  selection_attributes->push_back(kSampleSelectionAttribute);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Write to Response object.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbus::MessageWriter writer(response.get());
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AppendIBusText(text, &writer);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Read from Response object.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbus::MessageReader reader(response.get());
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBusText expected_text;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(PopIBusText(&reader, &expected_text));
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(kSampleText, expected_text.text());
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(kAnnotation, expected_text.annotation());
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(kDescriptionTitle, expected_text.description_title());
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(kDescriptionBody, expected_text.description_body());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(3U, expected_text.underline_attributes().size());
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1U, expected_text.selection_attributes().size());
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(IBusTextTest, StringAsIBusTextTest) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kSampleText[] = "Sample Text";
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Write to Response object.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbus::MessageWriter writer(response.get());
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AppendStringAsIBusText(kSampleText, &writer);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Read from Response object.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbus::MessageReader reader(response.get());
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBusText ibus_text;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(PopIBusText(&reader, &ibus_text));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kSampleText, ibus_text.text());
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ibus_text.underline_attributes().empty());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ibus_text.selection_attributes().empty());
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(IBusTextTest, PopStringFromIBusTextTest) {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kSampleText[] = "Sample Text";
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Write to Response object.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbus::MessageWriter writer(response.get());
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AppendStringAsIBusText(kSampleText, &writer);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Read from Response object.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dbus::MessageReader reader(response.get());
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(PopStringFromIBusText(&reader, &result));
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kSampleText, result);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
101