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 @@ ...@@ -4,6 +4,7 @@
# found in the LICENSE file. # found in the LICENSE file.
from xml.dom import minidom from xml.dom import minidom
import json
from writers import xml_formatted_writer from writers import xml_formatted_writer
...@@ -27,12 +28,19 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter): ...@@ -27,12 +28,19 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter):
self._AddLocalizedElement(field, 'label', policy['caption']) self._AddLocalizedElement(field, 'label', policy['caption'])
self._AddLocalizedElement(field, 'description', policy['desc']) 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, def _AddLocalizedElement(self,
parent, parent,
element_type, element_type,
text, text,
attributes={},
localization={'value': 'en-US'}): localization={'value': 'en-US'}):
item = self.AddElement(parent, element_type, {}) item = self.AddElement(parent, element_type, attributes)
localized = self.AddElement(item, 'language', localization) localized = self.AddElement(item, 'language', localization)
self.AddText(localized, text) self.AddText(localized, text)
...@@ -52,6 +60,39 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter): ...@@ -52,6 +60,39 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter):
{'policies': policies_without_group}): {'policies': policies_without_group}):
self._WritePolicyPresentation(policy, self._presentation) 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): def IsFuturePolicySupported(self, policy):
# For now, include all future policies in appconfig.xml. # For now, include all future policies in appconfig.xml.
return True return True
...@@ -98,7 +139,9 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter): ...@@ -98,7 +139,9 @@ class IOSAppConfigWriter(xml_formatted_writer.XMLFormattedWriter):
for config in policy['future_on']: for config in policy['future_on']:
if config['platform'] == 'ios': if config['platform'] == 'ios':
attributes['future'] = 'true' 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): def Init(self):
self._doc = self.CreateDocument() self._doc = self.CreateDocument()
......
...@@ -54,7 +54,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -54,7 +54,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'string description' 'desc': 'string description'
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="string policy" type="input">
<label> <label>
<language value="en-US">string caption</language> <language value="en-US">string caption</language>
...@@ -80,7 +82,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -80,7 +82,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'int description' 'desc': 'int description'
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="IntPolicy" type="input">
<label> <label>
<language value="en-US">int caption</language> <language value="en-US">int caption</language>
...@@ -108,14 +112,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -108,14 +112,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'int-enum caption', 'int-enum caption',
'desc': 'desc':
'int-enum description', 'int-enum description',
'schema': {
'type': 'integer',
'enum': [0, 1],
},
'items': [{ 'items': [{
'name': 'item0',
'value': 0,
'caption': 'item 0',
}, {
'name': 'item1', 'name': 'item1',
'value': 1, 'value': 1,
'caption': 'item 1', 'caption': 'item 1',
}] }]
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="IntEnumPolicy" type="select">
<label> <label>
<language value="en-US">int-enum caption</language> <language value="en-US">int-enum caption</language>
...@@ -123,6 +142,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -123,6 +142,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
<description> <description>
<language value="en-US">int-enum description</language> <language value="en-US">int-enum description</language>
</description> </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>''' </field>'''
expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration, expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration,
expected_presentation) expected_presentation)
...@@ -143,14 +170,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -143,14 +170,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'string-enum caption', 'string-enum caption',
'desc': 'desc':
'string-enum description', 'string-enum description',
'schema': {
'type': 'string',
'enum': ['0', '1'],
},
'items': [{ 'items': [{
'name': 'item0',
'value': '0',
'caption': 'item 0',
}, {
'name': 'item1', 'name': 'item1',
'value': '1', 'value': '1',
'caption': 'item 1', 'caption': 'item 1',
}] }]
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="StringEnumPolicy" type="select">
<label> <label>
<language value="en-US">string-enum caption</language> <language value="en-US">string-enum caption</language>
...@@ -158,6 +200,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -158,6 +200,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
<description> <description>
<language value="en-US">string-enum description</language> <language value="en-US">string-enum description</language>
</description> </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>''' </field>'''
expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration, expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration,
expected_presentation) expected_presentation)
...@@ -178,14 +228,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -178,14 +228,29 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'string-enum-list caption', 'string-enum-list caption',
'desc': 'desc':
'string-enum-list description', 'string-enum-list description',
'schema': {
'type': 'string',
'enum': ['0', '1'],
},
'items': [{ 'items': [{
'name': 'item0',
'value': '0',
'caption': 'item 0',
}, {
'name': 'item1', 'name': 'item1',
'value': '1', 'value': '1',
'caption': 'item 1', 'caption': 'item 1',
}] }]
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="StringEnumListPolicy" type="multiselect">
<label> <label>
<language value="en-US">string-enum-list caption</language> <language value="en-US">string-enum-list caption</language>
...@@ -193,6 +258,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -193,6 +258,14 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
<description> <description>
<language value="en-US">string-enum-list description</language> <language value="en-US">string-enum-list description</language>
</description> </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>''' </field>'''
expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration, expected = self._GetExpectedOutput('83.0.4089.0', expected_configuration,
expected_presentation) expected_presentation)
...@@ -211,7 +284,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -211,7 +284,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'boolean description' 'desc': 'boolean description'
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="BooleanPolicy" type="checkbox">
<label> <label>
<language value="en-US">boolean caption</language> <language value="en-US">boolean caption</language>
...@@ -237,7 +312,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -237,7 +312,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'list description' 'desc': 'list description'
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="ListPolicy" type="list">
<label> <label>
<language value="en-US">list caption</language> <language value="en-US">list caption</language>
...@@ -265,7 +342,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -265,7 +342,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
policy_json = self._GetTestPolicyTemplate(policy_definition) policy_json = self._GetTestPolicyTemplate(policy_definition)
# Dict policies are not supported by the appconfig.xml format, therefore # Dict policies are not supported by the appconfig.xml format, therefore
# they are treated as JSON strings. # 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"> expected_presentation = '''<field keyName="DictPolicy" type="input">
<label> <label>
<language value="en-US">dict caption</language> <language value="en-US">dict caption</language>
...@@ -291,7 +370,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -291,7 +370,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'string description' 'desc': 'string description'
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="FuturePolicy" type="input">
<label> <label>
<language value="en-US">string caption</language> <language value="en-US">string caption</language>
...@@ -317,7 +398,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -317,7 +398,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'desc': 'string description' 'desc': 'string description'
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) 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"> expected_presentation = '''<field keyName="NonFuturePolicy" type="input">
<label> <label>
<language value="en-US">string caption</language> <language value="en-US">string caption</language>
...@@ -349,7 +432,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon): ...@@ -349,7 +432,9 @@ class IOSAppConfigWriterUnitTests(writer_unittest_common.WriterUnittestCommon):
'policies': ['PolicyInGroup'] 'policies': ['PolicyInGroup']
}]) }])
policy_json = self._GetTestPolicyTemplate(policy_definition) policy_json = self._GetTestPolicyTemplate(policy_definition)
expected_configuration = '''<string keyName="PolicyInGroup"/>''' expected_configuration = '''<string keyName="PolicyInGroup">
<constraint nullable="true"/>
</string>'''
expected_presentation = '''<fieldGroup> expected_presentation = '''<fieldGroup>
<name> <name>
<language value="en-US">Dummy Group</language> <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