blob: c40f2dc0dc242a7d84e1d204347b48607954ba4d [file] [log] [blame]
Alex Vakulenko7c36b672014-07-16 14:50:58 -07001// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Alex Deymof6cbe322014-11-10 19:55:35 -08005#include "buffet/commands/command_manager.h"
6
Ben Chan15260972014-09-05 08:21:06 -07007#include <base/files/file_util.h>
Alex Vakulenkofd448692014-07-22 07:46:53 -07008#include <base/json/json_writer.h>
Alex Vakulenko7c36b672014-07-16 14:50:58 -07009#include <gtest/gtest.h>
10
Alex Vakulenkofd448692014-07-22 07:46:53 -070011#include "buffet/commands/unittest_utils.h"
12
13using buffet::unittests::CreateDictionaryValue;
14
15static base::FilePath SaveJsonToTempFile(const base::DictionaryValue& dict) {
16 std::string json;
17 base::JSONWriter::Write(&dict, &json);
18 base::FilePath temp_file;
19 base::CreateTemporaryFile(&temp_file);
20 base::WriteFile(temp_file, json.data(), static_cast<int>(json.size()));
21 return temp_file;
22}
Alex Vakulenko7c36b672014-07-16 14:50:58 -070023
24TEST(CommandManager, Empty) {
25 buffet::CommandManager manager;
26 EXPECT_TRUE(manager.GetCommandDictionary().IsEmpty());
27}
Alex Vakulenkofd448692014-07-22 07:46:53 -070028
29TEST(CommandManager, LoadBaseCommandsJSON) {
30 buffet::CommandManager manager;
31 auto json = CreateDictionaryValue(R"({
32 'base': {
33 'reboot': {
Anton Muhin71fb9d52014-11-21 22:22:39 +040034 'parameters': {'delay': 'integer'},
35 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -070036 },
37 'shutdown': {
Anton Muhin71fb9d52014-11-21 22:22:39 +040038 'parameters': {},
39 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -070040 }
41 }
42 })");
43 EXPECT_TRUE(manager.LoadBaseCommands(*json, nullptr));
44}
45
46TEST(CommandManager, LoadBaseCommandsFile) {
47 buffet::CommandManager manager;
48 auto json = CreateDictionaryValue(R"({
49 'base': {
50 'reboot': {
Anton Muhin71fb9d52014-11-21 22:22:39 +040051 'parameters': {'delay': 'integer'},
52 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -070053 },
54 'shutdown': {
Anton Muhin71fb9d52014-11-21 22:22:39 +040055 'parameters': {},
56 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -070057 }
58 }
59 })");
60 base::FilePath temp_file = SaveJsonToTempFile(*json);
61 EXPECT_TRUE(manager.LoadBaseCommands(temp_file, nullptr));
62 base::DeleteFile(temp_file, false);
63}
64
65TEST(CommandManager, LoadCommandsJSON) {
66 buffet::CommandManager manager;
67 auto json = CreateDictionaryValue(R"({
68 'robot': {
69 '_jump': {
Anton Muhin71fb9d52014-11-21 22:22:39 +040070 'parameters': {'height': 'integer'},
71 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -070072 },
73 '_speak': {
Anton Muhin71fb9d52014-11-21 22:22:39 +040074 'parameters': {'phrase': 'string'},
75 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -070076 }
77 }
78 })");
79 EXPECT_TRUE(manager.LoadCommands(*json, "category", nullptr));
80}
81
82TEST(CommandManager, LoadCommandsFile) {
83 buffet::CommandManager manager;
84 // Load some standard command definitions first.
85 auto json = CreateDictionaryValue(R"({
86 'base': {
87 'reboot': {
Anton Muhin71fb9d52014-11-21 22:22:39 +040088 'parameters': {'delay': 'integer'},
89 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -070090 },
91 'shutdown': {
Anton Muhin71fb9d52014-11-21 22:22:39 +040092 'parameters': {},
93 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -070094 }
95 }
96 })");
97 manager.LoadBaseCommands(*json, nullptr);
98 // Load device-supported commands.
99 json = CreateDictionaryValue(R"({
100 'base': {
101 'reboot': {
Anton Muhin71fb9d52014-11-21 22:22:39 +0400102 'parameters': {'delay': 'integer'},
103 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -0700104 }
105 },
106 'robot': {
107 '_jump': {
Anton Muhin71fb9d52014-11-21 22:22:39 +0400108 'parameters': {'height': 'integer'},
109 'results': {}
Alex Vakulenkofd448692014-07-22 07:46:53 -0700110 }
111 }
112 })");
113 base::FilePath temp_file = SaveJsonToTempFile(*json);
114 EXPECT_TRUE(manager.LoadCommands(temp_file, nullptr));
115 base::DeleteFile(temp_file, false);
116 EXPECT_EQ(2, manager.GetCommandDictionary().GetSize());
117 EXPECT_NE(nullptr, manager.GetCommandDictionary().FindCommand("base.reboot"));
118 EXPECT_NE(nullptr, manager.GetCommandDictionary().FindCommand("robot._jump"));
119}