Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Side by Side Diff: chrome/tools/profile_reset/jtl_compiler_unittest.cc

Issue 24998003: Compiler for the JSON Traversal Language. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium 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
5 #include "chrome/tools/profile_reset/jtl_compiler.h"
6
7 #include <string>
8
9 #include "base/json/json_writer.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/values.h"
12 #include "chrome/browser/profile_resetter/jtl_foundation.h"
13 #include "chrome/browser/profile_resetter/jtl_instructions.h"
14 #include "testing/gmock/include/gmock/gmock-matchers.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace {
18
19 const char kHashSeed[] = "test-hash-seed";
20
21 // Helpers -------------------------------------------------------------------
22
23 std::string GetHash(const std::string& input) {
24 return jtl_foundation::Hasher(kHashSeed).GetHash(input);
25 }
26
27 // Tests ---------------------------------------------------------------------
28
29 TEST(JtlCompiler, CompileSingleInstructions) {
30 struct TestCase {
31 std::string source_code;
32 std::string expected_bytecode;
33 } cases[] = {
34 {"node(\"foo\")/", OP_NAVIGATE(GetHash("foo"))},
35 {"node(\"bar\")/", OP_NAVIGATE(GetHash("bar"))},
36 {"any/", OP_NAVIGATE_ANY}, {"back/", OP_NAVIGATE_BACK},
battre 2013/09/27 15:00:01 nit: new line after ,
engedy 2013/10/01 10:48:10 Done.
37 {"store_bool(\"name\", true)/",
38 OP_STORE_BOOL(GetHash("name"), VALUE_TRUE)},
39 {"compare_stored_bool(\"name\", true, false)/",
40 OP_COMPARE_STORED_BOOL(GetHash("name"), VALUE_TRUE, VALUE_FALSE)},
41 {"store_hash(\"name\", \"value\")/",
42 OP_STORE_HASH(GetHash("name"), GetHash("value"))},
43 {"compare_stored_hash(\"name\", \"value\", \"default\")/",
44 OP_COMPARE_STORED_HASH(
45 GetHash("name"), GetHash("value"), GetHash("default"))},
46 {"compare_bool(false)/", OP_COMPARE_NODE_BOOL(VALUE_FALSE)},
47 {"compare_bool(true)/", OP_COMPARE_NODE_BOOL(VALUE_TRUE)},
48 {"compare_hash(\"foo\")/", OP_COMPARE_NODE_HASH(GetHash("foo"))},
49 {"compare_hash(\"bar\")/", OP_COMPARE_NODE_HASH(GetHash("bar"))},
50 {"break/", OP_STOP_EXECUTING_SENTENCE},
51 {"break;", OP_STOP_EXECUTING_SENTENCE + OP_END_OF_SENTENCE}};
52
53 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
54 SCOPED_TRACE(cases[i].source_code);
55 std::string bytecode;
56 EXPECT_TRUE(
57 JtlCompiler::Compile(cases[i].source_code, kHashSeed, &bytecode, NULL));
58 EXPECT_EQ(cases[i].expected_bytecode, bytecode);
59 }
60 }
61
62 TEST(JtlCompiler, CompileEntireProgram) {
63 const char kSourceCode[] =
64 "// Store \"x\"=true if path is found.\n"
65 "node(\"foo\")/node(\"bar\")/store_bool(\"x\", true);\n"
66 "// ...\n"
67 "// Store \"y\"=\"1\" if above value is set.\n"
68 "compare_stored_bool(\"x\", true, false)/store_hash(\"y\", \"1\");\n";
69
70 std::string expected_bytecode =
71 OP_NAVIGATE(GetHash("foo")) + OP_NAVIGATE(GetHash("bar")) +
72 OP_STORE_BOOL(GetHash("x"), VALUE_TRUE) + OP_END_OF_SENTENCE +
73 OP_COMPARE_STORED_BOOL(GetHash("x"), VALUE_TRUE, VALUE_FALSE) +
74 OP_STORE_HASH(GetHash("y"), GetHash("1")) + OP_END_OF_SENTENCE;
75
76 std::string bytecode;
77 EXPECT_TRUE(JtlCompiler::Compile(kSourceCode, kHashSeed, &bytecode, NULL));
78 EXPECT_EQ(expected_bytecode, bytecode);
79 }
80
81 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698