Commit 6bc6062f authored by Christopher Lam's avatar Christopher Lam Committed by Commit Bot

[style_var_gen] Add BaseGenerator.Validate() test and fix bug.

This CL fixes a bug where Validate() wouldn't catch that a color wasn't
defined for the default mode. It also adds some tests.

Bug: 1018654
Change-Id: I226124d6a4fc51020b96e85309fda42a98132abd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2251126Reviewed-by: default avatarGiovanni Ortuño Urquidi <ortuno@chromium.org>
Commit-Queue: calamity <calamity@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780173}
parent e70afafb
......@@ -75,10 +75,13 @@ class BaseGenerator:
def AddJSONFileToModel(self, path):
self.in_files.append(path)
with open(path, 'r') as f:
# TODO(calamity): Add allow_duplicate_keys=False once pyjson5 is
# rolled.
data = json5.loads(
f.read(), object_pairs_hook=collections.OrderedDict)
self.AddJSONToModel(f.read())
def AddJSONToModel(self, json_string):
# TODO(calamity): Add allow_duplicate_keys=False once pyjson5 is
# rolled.
data = json5.loads(json_string,
object_pairs_hook=collections.OrderedDict)
try:
for name, value in data['colors'].items():
......@@ -103,7 +106,7 @@ class BaseGenerator:
return template.render(params)
def Validate(self):
def CheckIsInDefaultModel(name):
def CheckColorInDefaultMode(name):
if name not in self._mode_variables[self._default_mode].colors:
raise ValueError(
"%s not defined in '%s' mode" % (name, self._default_mode))
......@@ -112,10 +115,11 @@ class BaseGenerator:
# default mode.
for m in self._mode_variables.values():
for name, value in m.colors.items():
CheckColorInDefaultMode(name)
if value.var:
CheckIsInDefaultModel(value.var)
CheckColorInDefaultMode(value.var)
if value.rgb_var:
CheckIsInDefaultModel(value.rgb_var[:-4])
CheckColorInDefaultMode(value.rgb_var[:-4])
# TODO(calamity): Check for circular references.
......
# Copyright 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from base_generator import BaseGenerator
import unittest
class BaseGeneratorTest(unittest.TestCase):
def setUp(self):
self.generator = BaseGenerator()
def testMissingColor(self):
# google_grey_900 is missing.
self.generator.AddJSONToModel('''
{
colors: {
cros_default_text_color: {
light: "$google_grey_900",
dark: "rgb(255, 255, 255)",
},
},
}
''')
self.assertRaises(ValueError, self.generator.Validate)
# Add google_grey_900.
self.generator.AddJSONToModel('''
{
colors: {
google_grey_900: "rgb(255, 255, 255)",
}
}
''')
self.generator.Validate()
def testMissingDefaultModeColor(self):
# google_grey_900 is missing in the default mode (light).
self.generator.AddJSONToModel('''
{
colors: {
google_grey_900: { dark: "rgb(255, 255, 255)", },
}
}
''')
self.assertRaises(ValueError, self.generator.Validate)
# Add google_grey_900 to light mode.
self.generator.AddJSONToModel('''
{
colors: {
google_grey_900: { light: "rgb(255, 255, 255)", }
}
}
''')
self.generator.Validate()
if __name__ == '__main__':
unittest.main()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment