521
524
SetMockOutput(mock_output);
522
525
EXPECT_TRUE(session_->EnsureConnection());
524
start_server_handler_->set_start_server_called(false);
525
EXPECT_FALSE(start_server_handler_->start_server_called());
527
server_launcher_->set_start_server_called(false);
528
EXPECT_FALSE(server_launcher_->start_server_called());
527
530
// version is not updated after restart the server
528
start_server_handler_->set_mock_after_start_server(mock_output);
531
server_launcher_->set_mock_after_start_server(mock_output);
529
532
EXPECT_FALSE(session_->EnsureSession());
530
EXPECT_TRUE(start_server_handler_->start_server_called());
533
EXPECT_TRUE(server_launcher_->start_server_called());
531
534
EXPECT_FALSE(session_->EnsureConnection());
532
EXPECT_EQ(1, start_server_handler_->error_count
533
(StartServerHandlerInterface::SERVER_BROKEN_MESSAGE));
535
EXPECT_EQ(1, server_launcher_->error_count
536
(ServerLauncherInterface::SERVER_BROKEN_MESSAGE));
539
class SessionPlaybackTestServerLauncher :
540
public ServerLauncherInterface {
542
SessionPlaybackTestServerLauncher(IPCClientFactoryMock *factory)
544
start_server_result_(false),
545
start_server_called_(false),
546
force_terminate_server_result_(false),
547
force_terminate_server_called_(false),
548
server_protocol_version_(IPC_PROTOCOL_VERSION) {}
550
virtual void Ready() {}
551
virtual void Wait() {}
552
virtual void Error() {}
554
virtual bool StartServer(SessionInterface *session) {
555
if (!response_.empty()) {
556
factory_->SetMockResponse(response_);
558
if (!product_version_after_start_server_.empty()) {
559
factory_->SetServerProductVersion(product_version_after_start_server_);
561
factory_->SetServerProtocolVersion(server_protocol_version_);
562
start_server_called_ = true;
563
return start_server_result_;
566
virtual bool ForceTerminateServer(const string &name) {
567
force_terminate_server_called_ = true;
568
return force_terminate_server_result_;
571
virtual bool WaitServer(uint32 pid) {
575
virtual void OnFatal(ServerLauncherInterface::ServerErrorType type) {
578
void set_server_program(const string &server_path) {}
580
void set_restricted(bool restricted) {}
582
void set_start_server_result(const bool result) {
583
start_server_result_ = result;
587
virtual const string &server_program() const {
588
static const string path;
593
IPCClientFactoryMock *factory_;
594
bool start_server_result_;
595
bool start_server_called_;
596
bool force_terminate_server_result_;
597
bool force_terminate_server_called_;
598
uint32 server_protocol_version_;
600
string product_version_after_start_server_;
601
map<int, int> error_map_;
604
class SessionPlaybackTest : public testing::Test {
606
SessionPlaybackTest() {}
608
virtual void SetUp() {
609
client_factory_.reset(new IPCClientFactoryMock);
610
client_.reset(reinterpret_cast<IPCClientMock *>(
611
client_factory_->NewClient("")));
612
session_.reset(new Session);
613
session_->SetIPCClientFactory(client_factory_.get());
614
server_launcher_ = new SessionPlaybackTestServerLauncher(
615
client_factory_.get());
616
session_->SetServerLauncher(server_launcher_);
619
virtual void TearDown() {
621
client_factory_.reset();
624
bool SetupConnection(const int id) {
625
client_factory_->SetConnection(true);
626
client_factory_->SetResult(true);
627
client_factory_->SetServerProductVersion(Version::GetMozcVersion());
628
server_launcher_->set_start_server_result(true);
630
// TODO(komatsu): Due to the limitation of the testing mock,
631
// EnsureConnection should be explicitly called before calling
632
// SendKey. Fix the testing mock.
633
commands::Output mock_output;
634
mock_output.set_id(id);
635
SetMockOutput(mock_output);
636
return session_->EnsureConnection();
639
void SetMockOutput(const commands::Output &mock_output) {
641
mock_output.SerializeToString(&response);
642
client_factory_->SetMockResponse(response);
645
void GetGeneratedInput(commands::Input *input) {
646
input->ParseFromString(client_factory_->GetGeneratedRequest());
649
scoped_ptr<IPCClientFactoryMock> client_factory_;
650
scoped_ptr<IPCClientMock> client_;
651
scoped_ptr<Session> session_;
652
SessionPlaybackTestServerLauncher *server_launcher_;
655
DISALLOW_COPY_AND_ASSIGN(SessionPlaybackTest);
658
// TODO(toshiyuki): Update these test after the implementation for Mac.
660
TEST_F(SessionPlaybackTest, PushAndResetHistoryWithNoModeTest) {
661
const int mock_id = 123;
662
EXPECT_TRUE(SetupConnection(mock_id));
664
commands::KeyEvent key_event;
665
key_event.set_special_key(commands::KeyEvent::ENTER);
667
commands::Output mock_output;
668
mock_output.set_id(mock_id);
669
mock_output.set_consumed(true);
670
SetMockOutput(mock_output);
672
commands::Output output;
673
EXPECT_TRUE(session_->SendKey(key_event, &output));
674
EXPECT_EQ(mock_output.consumed(), output.consumed());
676
vector<commands::Input> history;
677
session_->GetHistoryInputs(&history);
678
EXPECT_EQ(1, history.size());
681
mock_output.set_id(mock_id);
682
mock_output.set_consumed(true);
683
mock_output.mutable_result()->set_type(commands::Result::STRING);
684
mock_output.mutable_result()->set_value("output");
685
EXPECT_FALSE(mock_output.has_mode());
686
SetMockOutput(mock_output);
687
EXPECT_TRUE(session_->SendKey(key_event, &output));
688
EXPECT_EQ(mock_output.consumed(), output.consumed());
690
// history should be reset.
691
session_->GetHistoryInputs(&history);
692
EXPECT_EQ(0, history.size());
695
TEST_F(SessionPlaybackTest, PushAndResetHistoryWithModeTest) {
697
const int mock_id = 123;
698
EXPECT_TRUE(SetupConnection(mock_id));
700
commands::KeyEvent key_event;
701
key_event.set_special_key(commands::KeyEvent::ENTER);
703
// On Windows, mode initializer should be added if the output contains mode.
704
commands::Output mock_output;
705
mock_output.set_id(mock_id);
706
mock_output.set_consumed(true);
707
mock_output.set_mode(commands::HIRAGANA);
708
SetMockOutput(mock_output);
710
commands::Output output;
711
EXPECT_TRUE(session_->SendKey(key_event, &output));
712
EXPECT_EQ(mock_output.consumed(), output.consumed());
713
EXPECT_TRUE(output.has_mode());
714
EXPECT_EQ(commands::HIRAGANA, output.mode());
716
EXPECT_TRUE(session_->SendKey(key_event, &output));
717
EXPECT_EQ(mock_output.consumed(), output.consumed());
718
EXPECT_TRUE(output.has_mode());
719
EXPECT_EQ(commands::HIRAGANA, output.mode());
721
vector<commands::Input> history;
722
session_->GetHistoryInputs(&history);
723
EXPECT_EQ(2, history.size());
726
mock_output.set_id(mock_id);
727
mock_output.set_consumed(true);
728
mock_output.mutable_result()->set_type(commands::Result::STRING);
729
mock_output.mutable_result()->set_value("output");
730
SetMockOutput(mock_output);
731
EXPECT_TRUE(session_->SendKey(key_event, &output));
732
EXPECT_EQ(mock_output.consumed(), output.consumed());
733
// history is reset, but initializer should be added.
734
session_->GetHistoryInputs(&history);
735
EXPECT_EQ(1, history.size());
739
TEST_F(SessionPlaybackTest, PushAndResetHistoryWithDirectTest) {
741
const int mock_id = 123;
742
EXPECT_TRUE(SetupConnection(mock_id));
744
commands::KeyEvent key_event;
745
key_event.set_special_key(commands::KeyEvent::ENTER);
747
// On Windows, mode initializer should be added if the output contains mode.
748
commands::Output mock_output;
749
mock_output.set_id(mock_id);
750
mock_output.set_consumed(true);
751
mock_output.set_mode(commands::DIRECT);
752
SetMockOutput(mock_output);
754
commands::Output output;
756
EXPECT_TRUE(session_->SendKey(key_event, &output));
757
EXPECT_EQ(mock_output.consumed(), output.consumed());
758
EXPECT_TRUE(output.has_mode());
759
EXPECT_EQ(commands::DIRECT, output.mode());
761
EXPECT_TRUE(session_->SendKey(key_event, &output));
762
EXPECT_EQ(mock_output.consumed(), output.consumed());
763
EXPECT_TRUE(output.has_mode());
764
EXPECT_EQ(commands::DIRECT, output.mode());
766
vector<commands::Input> history;
767
session_->GetHistoryInputs(&history);
768
EXPECT_EQ(2, history.size());
771
mock_output.set_id(mock_id);
772
mock_output.set_consumed(true);
773
mock_output.mutable_result()->set_type(commands::Result::STRING);
774
mock_output.mutable_result()->set_value("output");
775
SetMockOutput(mock_output);
776
EXPECT_TRUE(session_->SendKey(key_event, &output));
777
EXPECT_EQ(mock_output.consumed(), output.consumed());
778
// history is reset, and initializer should not be added.
779
session_->GetHistoryInputs(&history);
780
EXPECT_EQ(0, history.size());
784
TEST_F(SessionPlaybackTest, PlaybackHistoryTest) {
785
const int mock_id = 123;
786
EXPECT_TRUE(SetupConnection(mock_id));
788
commands::KeyEvent key_event;
789
key_event.set_special_key(commands::KeyEvent::ENTER);
791
// On Windows, mode initializer should be added if the output contains mode.
792
commands::Output mock_output;
793
mock_output.set_id(mock_id);
794
mock_output.set_consumed(true);
795
SetMockOutput(mock_output);
797
commands::Output output;
798
EXPECT_TRUE(session_->SendKey(key_event, &output));
799
EXPECT_EQ(mock_output.consumed(), output.consumed());
801
EXPECT_TRUE(session_->SendKey(key_event, &output));
802
EXPECT_EQ(mock_output.consumed(), output.consumed());
804
vector<commands::Input> history;
805
session_->GetHistoryInputs(&history);
806
EXPECT_EQ(2, history.size());
809
const int new_id = 456;
810
mock_output.set_id(new_id);
811
SetMockOutput(mock_output);
812
EXPECT_TRUE(session_->SendKey(key_event, &output));
815
// PlaybackHistory and push history
816
session_->GetHistoryInputs(&history);
817
EXPECT_EQ(3, history.size());
819
// PlaybackHistory, dump history(including reset), and add last input
820
session_->GetHistoryInputs(&history);
821
EXPECT_EQ(1, history.size());
825
TEST_F(SessionPlaybackTest, SetModeInitializerTest) {
827
const int mock_id = 123;
828
EXPECT_TRUE(SetupConnection(mock_id));
830
commands::KeyEvent key_event;
831
key_event.set_special_key(commands::KeyEvent::ENTER);
833
// On Windows, mode initializer should be added if the output contains mode.
834
commands::Output mock_output;
835
mock_output.set_id(mock_id);
836
mock_output.set_consumed(true);
837
mock_output.set_mode(commands::HIRAGANA);
838
SetMockOutput(mock_output);
840
commands::Output output;
841
EXPECT_TRUE(session_->SendKey(key_event, &output));
842
EXPECT_EQ(mock_output.consumed(), output.consumed());
844
mock_output.set_mode(commands::DIRECT);
845
SetMockOutput(mock_output);
847
EXPECT_TRUE(session_->SendKey(key_event, &output));
848
EXPECT_EQ(mock_output.consumed(), output.consumed());
849
EXPECT_TRUE(output.has_mode());
850
EXPECT_EQ(commands::DIRECT, output.mode());
852
mock_output.set_mode(commands::FULL_KATAKANA);
853
SetMockOutput(mock_output);
855
EXPECT_TRUE(session_->SendKey(key_event, &output));
856
EXPECT_EQ(mock_output.consumed(), output.consumed());
857
EXPECT_TRUE(output.has_mode());
858
EXPECT_EQ(commands::FULL_KATAKANA, output.mode());
860
vector<commands::Input> history;
861
session_->GetHistoryInputs(&history);
862
EXPECT_EQ(3, history.size());
865
mock_output.set_id(mock_id);
866
mock_output.set_consumed(true);
867
mock_output.mutable_result()->set_type(commands::Result::STRING);
868
mock_output.mutable_result()->set_value("output");
869
SetMockOutput(mock_output);
870
EXPECT_TRUE(session_->SendKey(key_event, &output));
871
EXPECT_EQ(mock_output.consumed(), output.consumed());
872
// history is reset, but initializer should be added.
873
session_->GetHistoryInputs(&history);
874
EXPECT_EQ(1, history.size());
875
EXPECT_EQ(commands::FULL_KATAKANA, history[0].key().mode());
879
TEST_F(SessionPlaybackTest, ConsumedTest) {
880
const int mock_id = 123;
881
EXPECT_TRUE(SetupConnection(mock_id));
883
commands::KeyEvent key_event;
884
key_event.set_special_key(commands::KeyEvent::ENTER);
886
commands::Output mock_output;
887
mock_output.set_id(mock_id);
888
mock_output.set_consumed(true);
889
SetMockOutput(mock_output);
891
commands::Output output;
892
EXPECT_TRUE(session_->SendKey(key_event, &output));
893
EXPECT_EQ(mock_output.consumed(), output.consumed());
895
EXPECT_TRUE(session_->SendKey(key_event, &output));
896
EXPECT_EQ(mock_output.consumed(), output.consumed());
898
vector<commands::Input> history;
899
session_->GetHistoryInputs(&history);
900
EXPECT_EQ(2, history.size());
902
mock_output.set_consumed(false);
903
SetMockOutput(mock_output);
905
EXPECT_TRUE(session_->SendKey(key_event, &output));
906
EXPECT_EQ(mock_output.consumed(), output.consumed());
908
// Do not push unconsumed input
909
session_->GetHistoryInputs(&history);
910
EXPECT_EQ(2, history.size());
535
912
} // namespace client
536
913
} // namespace mozc