Commit 4617a6bb authored by Yann Dago's avatar Yann Dago Committed by Commit Bot

Generate default value and constraints in appconfig.xml

Bug: 1128264
Change-Id: Ibce9e5bc6cb86a88a6b5b1ce8365494e4d6d4f80
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2561258
Commit-Queue: Yann Dago <ydago@chromium.org>
Reviewed-by: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#831102}
parent eeac71e0
......@@ -4,6 +4,7 @@
# found in the LICENSE file.
from xml.dom import minidom
import json
from writers import xml_formatted_writer
......@@ -27,12 +28,19 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter):
self._AddLocalizedElement(field, 'label', policy['caption'])
self._AddLocalizedElement(field, 'description', policy['desc'])
if 'enum' in policy['type']:
options = self.AddElement(field, 'options', {})
for item in policy['items']:
self._AddLocalizedElement(options, 'option', str(item['caption']),
{'value': str(item['value'])})
def _AddLocalizedElement(self,
parent,
element_type,
text,
attributes={},
localization={'value': 'en-US'}):
item = self.AddElement(parent, element_type, {})
item = self.AddElement(parent, element_type, attributes)
localized = self.AddElement(item, 'language', localization)
self.AddText(localized, text)
......@@ -52,6 +60,39 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter):
{'policies': policies_without_group}):
self._WritePolicyPresentation(policy, self._presentation)
def _WritePolicyDefaultValue(self, parent, policy):
if 'default' in policy:
default_value = self.AddElement(parent, 'defaultValue', {})
value = self.AddElement(default_value, 'value', {})
if policy['type'] == 'main':
if policy['default'] == True:
self.AddText(value, 'true')
elif policy['default'] == False:
self.AddText(value, 'false')
elif policy['type'] in ['list', 'string-enum-list']:
for v in policy['default']:
if value == None:
value = self.AddElement(default_value, 'value', {})
self.AddText(value, v)
value = None
else:
self.AddText(value, policy['default'])
def _WritePolicyConstraint(self, parent, policy):
attrs = {'nullable': 'true'}
if 'schema' in policy:
if 'minimum' in policy['schema']:
attrs['min'] = policy['schema']['minimum']
if 'maximum' in policy['schema']:
attrs['max'] = policy['schema']['maximum']
constraint = self.AddElement(parent, 'constraint', attrs)
if 'enum' in policy['type']:
values_element = self.AddElement(constraint, 'values', {})
for v in policy['schema']['enum']:
value = self.AddElement(values_element, 'value', {})
self.AddText(value, str(v))
def IsFuturePolicySupported(self, policy):
# For now, include all future policies in appconfig.xml.
return True
......@@ -98,7 +139,9 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter):
for config in policy['future_on']:
if config['platform'] == 'ios':
attributes['future'] = 'true'
self.AddElement(self._policies, element_type, attributes)
policy_element = self.AddElement(self._policies, element_type, attributes)
self._WritePolicyDefaultValue(policy_element, policy)
self._WritePolicyConstraint(policy_element, policy)
def Init(self):
self._doc = self.CreateDocument()
......
......@@ -54,7 +54,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'string description'
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<string keyName="string policy"/>'''
expected_configuration = '''<string keyName="string policy">
<constraint nullable="true"/>
</string>'''
expected_presentation = '''<field keyName="string policy" type="input">
<label>
<language value="en-US">string caption</language>
......@@ -80,7 +82,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'int description'
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<integer keyName="IntPolicy"/>'''
expected_configuration = '''<integer keyName="IntPolicy">
<constraint nullable="true"/>
</integer>'''
expected_presentation = '''<field keyName="IntPolicy" type="input">
<label>
<language value="en-US">int caption</language>
......@@ -108,14 +112,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'int-enum caption',
'desc':
'int-enum description',
'schema': {
'type': 'integer',
'enum': [0, 1],
},
'items': [{
'name': 'item0',
'value': 0,
'caption': 'item 0',
}, {
'name': 'item1',
'value': 1,
'caption': 'item 1',
}]
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<integer keyName="IntEnumPolicy"/>'''
expected_configuration = '''<integer keyName="IntEnumPolicy">
<constraint nullable="true">
<values>
<value>0</value>
<value>1</value>
</values>
</constraint>
</integer>'''
expected_presentation = '''<field keyName="IntEnumPolicy" type="select">
<label>
<language value="en-US">int-enum caption</language>
......@@ -123,6 +142,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
<description>
<language value="en-US">int-enum description</language>
</description>
<options>
<option value="0">
<language value="en-US">item 0</language>
</option>
<option value="1">
<language value="en-US">item 1</language>
</option>
</options>
</field>'''
expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration,
expected_presentation)
......@@ -143,14 +170,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'string-enum caption',
'desc':
'string-enum description',
'schema': {
'type': 'string',
'enum': ['0', '1'],
},
'items': [{
'name': 'item0',
'value': '0',
'caption': 'item 0',
}, {
'name': 'item1',
'value': '1',
'caption': 'item 1',
}]
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<string keyName="StringEnumPolicy"/>'''
expected_configuration = '''<string keyName="StringEnumPolicy">
<constraint nullable="true">
<values>
<value>0</value>
<value>1</value>
</values>
</constraint>
</string>'''
expected_presentation = '''<field keyName="StringEnumPolicy" type="select">
<label>
<language value="en-US">string-enum caption</language>
......@@ -158,6 +200,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
<description>
<language value="en-US">string-enum description</language>
</description>
<options>
<option value="0">
<language value="en-US">item 0</language>
</option>
<option value="1">
<language value="en-US">item 1</language>
</option>
</options>
</field>'''
expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration,
expected_presentation)
......@@ -178,14 +228,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'string-enum-list caption',
'desc':
'string-enum-list description',
'schema': {
'type': 'string',
'enum': ['0', '1'],
},
'items': [{
'name': 'item0',
'value': '0',
'caption': 'item 0',
}, {
'name': 'item1',
'value': '1',
'caption': 'item 1',
}]
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<stringArray keyName="StringEnumListPolicy"/>'''
expected_configuration = '''<stringArray keyName="StringEnumListPolicy">
<constraint nullable="true">
<values>
<value>0</value>
<value>1</value>
</values>
</constraint>
</stringArray>'''
expected_presentation = '''<field keyName="StringEnumListPolicy" type="multiselect">
<label>
<language value="en-US">string-enum-list caption</language>
......@@ -193,6 +258,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
<description>
<language value="en-US">string-enum-list description</language>
</description>
<options>
<option value="0">
<language value="en-US">item 0</language>
</option>
<option value="1">
<language value="en-US">item 1</language>
</option>
</options>
</field>'''
expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration,
expected_presentation)
......@@ -211,7 +284,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'boolean description'
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<boolean keyName="BooleanPolicy"/>'''
expected_configuration = '''<boolean keyName="BooleanPolicy">
<constraint nullable="true"/>
</boolean>'''
expected_presentation = '''<field keyName="BooleanPolicy" type="checkbox">
<label>
<language value="en-US">boolean caption</language>
......@@ -237,7 +312,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'list description'
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<stringArray keyName="ListPolicy"/>'''
expected_configuration = '''<stringArray keyName="ListPolicy">
<constraint nullable="true"/>
</stringArray>'''
expected_presentation = '''<field keyName="ListPolicy" type="list">
<label>
<language value="en-US">list caption</language>
......@@ -265,7 +342,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
policy_json = self._GetTestPolicyTemplate(policy_definition)
# Dict policies are not supported by the appconfig.xml format, therefore
# they are treated as JSON strings.
expected_configuration = '''<string keyName="DictPolicy"/>'''
expected_configuration = '''<string keyName="DictPolicy">
<constraint nullable="true"/>
</string>'''
expected_presentation = '''<field keyName="DictPolicy" type="input">
<label>
<language value="en-US">dict caption</language>
......@@ -291,7 +370,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'string description'
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<string future="true" keyName="FuturePolicy"/>'''
expected_configuration = '''<string future="true" keyName="FuturePolicy">
<constraint nullable="true"/>
</string>'''
expected_presentation = '''<field keyName="FuturePolicy" type="input">
<label>
<language value="en-US">string caption</language>
......@@ -317,7 +398,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'string description'
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<string keyName="NonFuturePolicy"/>'''
expected_configuration = '''<string keyName="NonFuturePolicy">
<constraint nullable="true"/>
</string>'''
expected_presentation = '''<field keyName="NonFuturePolicy" type="input">
<label>
<language value="en-US">string caption</language>
......@@ -349,7 +432,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'policies': ['PolicyInGroup']
}])
policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<string keyName="PolicyInGroup"/>'''
expected_configuration = '''<string keyName="PolicyInGroup">
<constraint nullable="true"/>
</string>'''
expected_presentation = '''<fieldGroup>
<name>
<language value="en-US">Dummy Group</language>
......
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