Merge "Handle utf8 in JJB"
This commit is contained in:
commit
fef529287e
@ -82,7 +82,7 @@ def deep_format(obj, paramdict):
|
|||||||
# limitations on the values in paramdict - the post-format result must
|
# limitations on the values in paramdict - the post-format result must
|
||||||
# still be valid YAML (so substituting-in a string containing quotes, for
|
# still be valid YAML (so substituting-in a string containing quotes, for
|
||||||
# example, is problematic).
|
# example, is problematic).
|
||||||
if isinstance(obj, str):
|
if isinstance(obj, basestring):
|
||||||
try:
|
try:
|
||||||
result = re.match('^{obj:(?P<key>\w+)}$', obj)
|
result = re.match('^{obj:(?P<key>\w+)}$', obj)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
@ -464,7 +464,7 @@ class XmlJob(object):
|
|||||||
return hashlib.md5(self.output()).hexdigest()
|
return hashlib.md5(self.output()).hexdigest()
|
||||||
|
|
||||||
def output(self):
|
def output(self):
|
||||||
out = minidom.parseString(XML.tostring(self.xml))
|
out = minidom.parseString(XML.tostring(self.xml, encoding='UTF-8'))
|
||||||
return out.toprettyxml(indent=' ', encoding='utf-8')
|
return out.toprettyxml(indent=' ', encoding='utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ Example:
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import codecs
|
||||||
import functools
|
import functools
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
@ -140,7 +141,7 @@ class LocalLoader(yaml.Loader):
|
|||||||
def _include_raw_tag(self, loader, node):
|
def _include_raw_tag(self, loader, node):
|
||||||
filename = self._find_file(loader.construct_yaml_str(node))
|
filename = self._find_file(loader.construct_yaml_str(node))
|
||||||
try:
|
try:
|
||||||
with open(filename, 'r') as f:
|
with codecs.open(filename, 'r', 'utf-8') as f:
|
||||||
data = f.read()
|
data = f.read()
|
||||||
except:
|
except:
|
||||||
logger.error("Failed to include file using search path: '{0}'"
|
logger.error("Failed to include file using search path: '{0}'"
|
||||||
|
@ -78,22 +78,24 @@ class BaseTestCase(object):
|
|||||||
|
|
||||||
logging.basicConfig()
|
logging.basicConfig()
|
||||||
|
|
||||||
def _read_content(self):
|
def _read_utf8_content(self):
|
||||||
# Read XML content, assuming it is unicode encoded
|
# Read XML content, assuming it is unicode encoded
|
||||||
xml_filepath = os.path.join(self.fixtures_path, self.out_filename)
|
xml_filepath = os.path.join(self.fixtures_path, self.out_filename)
|
||||||
xml_content = u"%s" % codecs.open(xml_filepath, 'r', 'utf-8').read()
|
xml_content = u"%s" % codecs.open(xml_filepath, 'r', 'utf-8').read()
|
||||||
|
return xml_content
|
||||||
|
|
||||||
|
def _read_yaml_content(self):
|
||||||
yaml_filepath = os.path.join(self.fixtures_path, self.in_filename)
|
yaml_filepath = os.path.join(self.fixtures_path, self.in_filename)
|
||||||
with file(yaml_filepath, 'r') as yaml_file:
|
with file(yaml_filepath, 'r') as yaml_file:
|
||||||
yaml_content = yaml.load(yaml_file)
|
yaml_content = yaml.load(yaml_file)
|
||||||
|
return yaml_content
|
||||||
return (yaml_content, xml_content)
|
|
||||||
|
|
||||||
def test_yaml_snippet(self):
|
def test_yaml_snippet(self):
|
||||||
if not self.out_filename or not self.in_filename:
|
if not self.out_filename or not self.in_filename:
|
||||||
return
|
return
|
||||||
|
|
||||||
yaml_content, expected_xml = self._read_content()
|
expected_xml = self._read_utf8_content()
|
||||||
|
yaml_content = self._read_yaml_content()
|
||||||
project = None
|
project = None
|
||||||
if ('project-type' in yaml_content):
|
if ('project-type' in yaml_content):
|
||||||
if (yaml_content['project-type'] == "maven"):
|
if (yaml_content['project-type'] == "maven"):
|
||||||
@ -130,11 +132,7 @@ class BaseTestCase(object):
|
|||||||
|
|
||||||
class SingleJobTestCase(BaseTestCase):
|
class SingleJobTestCase(BaseTestCase):
|
||||||
def test_yaml_snippet(self):
|
def test_yaml_snippet(self):
|
||||||
if not self.out_filename or not self.in_filename:
|
expected_xml = self._read_utf8_content()
|
||||||
return
|
|
||||||
|
|
||||||
xml_filepath = os.path.join(self.fixtures_path, self.out_filename)
|
|
||||||
expected_xml = u"%s" % open(xml_filepath, 'r').read()
|
|
||||||
|
|
||||||
yaml_filepath = os.path.join(self.fixtures_path, self.in_filename)
|
yaml_filepath = os.path.join(self.fixtures_path, self.in_filename)
|
||||||
|
|
||||||
@ -154,7 +152,8 @@ class SingleJobTestCase(BaseTestCase):
|
|||||||
parser.jobs.sort(key=operator.attrgetter('name'))
|
parser.jobs.sort(key=operator.attrgetter('name'))
|
||||||
|
|
||||||
# Prettify generated XML
|
# Prettify generated XML
|
||||||
pretty_xml = "\n".join(job.output() for job in parser.jobs)
|
pretty_xml = unicode("\n".join(job.output() for job in parser.jobs),
|
||||||
|
'utf-8')
|
||||||
|
|
||||||
self.assertThat(
|
self.assertThat(
|
||||||
pretty_xml,
|
pretty_xml,
|
||||||
@ -168,10 +167,8 @@ class SingleJobTestCase(BaseTestCase):
|
|||||||
class JsonTestCase(BaseTestCase):
|
class JsonTestCase(BaseTestCase):
|
||||||
|
|
||||||
def test_yaml_snippet(self):
|
def test_yaml_snippet(self):
|
||||||
if not self.out_filename or not self.in_filename:
|
expected_json = self._read_utf8_content()
|
||||||
return
|
yaml_content = self._read_yaml_content()
|
||||||
|
|
||||||
yaml_content, expected_json = self._read_content()
|
|
||||||
|
|
||||||
pretty_json = json.dumps(yaml_content, indent=4,
|
pretty_json = json.dumps(yaml_content, indent=4,
|
||||||
separators=(',', ': '))
|
separators=(',', ': '))
|
||||||
|
2
tests/yamlparser/fixtures/include-rawunicode001-cool.sh
Normal file
2
tests/yamlparser/fixtures/include-rawunicode001-cool.sh
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
echo "Unicode! ☃"
|
25
tests/yamlparser/fixtures/include-rawunicode001.xml
Normal file
25
tests/yamlparser/fixtures/include-rawunicode001.xml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<project>
|
||||||
|
<actions/>
|
||||||
|
<description><!-- Managed by Jenkins Job Builder --></description>
|
||||||
|
<keepDependencies>false</keepDependencies>
|
||||||
|
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
|
||||||
|
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
|
||||||
|
<concurrentBuild>false</concurrentBuild>
|
||||||
|
<canRoam>true</canRoam>
|
||||||
|
<properties/>
|
||||||
|
<scm class="hudson.scm.NullSCM"/>
|
||||||
|
<builders/>
|
||||||
|
<publishers/>
|
||||||
|
<buildWrappers>
|
||||||
|
<org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper>
|
||||||
|
<buildSteps>
|
||||||
|
<hudson.tasks.Shell>
|
||||||
|
<command>#!/bin/bash
|
||||||
|
echo "Unicode! ☃"
|
||||||
|
</command>
|
||||||
|
</hudson.tasks.Shell>
|
||||||
|
</buildSteps>
|
||||||
|
</org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper>
|
||||||
|
</buildWrappers>
|
||||||
|
</project>
|
11
tests/yamlparser/fixtures/include-rawunicode001.yaml
Normal file
11
tests/yamlparser/fixtures/include-rawunicode001.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
- wrapper:
|
||||||
|
name: unicode-raw-include-wrapper
|
||||||
|
wrappers:
|
||||||
|
- pre-scm-buildstep:
|
||||||
|
- shell:
|
||||||
|
!include-raw include-rawunicode001-cool.sh
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: test-unicode-raw-include-wrapper
|
||||||
|
wrappers:
|
||||||
|
- unicode-raw-include-wrapper
|
25
tests/yamlparser/fixtures/unicode001.xml
Normal file
25
tests/yamlparser/fixtures/unicode001.xml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<project>
|
||||||
|
<actions/>
|
||||||
|
<description><!-- Managed by Jenkins Job Builder --></description>
|
||||||
|
<keepDependencies>false</keepDependencies>
|
||||||
|
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
|
||||||
|
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
|
||||||
|
<concurrentBuild>false</concurrentBuild>
|
||||||
|
<canRoam>true</canRoam>
|
||||||
|
<properties/>
|
||||||
|
<scm class="hudson.scm.NullSCM"/>
|
||||||
|
<builders/>
|
||||||
|
<publishers/>
|
||||||
|
<buildWrappers>
|
||||||
|
<org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper>
|
||||||
|
<buildSteps>
|
||||||
|
<hudson.tasks.Shell>
|
||||||
|
<command>#!/bin/bash
|
||||||
|
echo "Unicode! ☃"
|
||||||
|
</command>
|
||||||
|
</hudson.tasks.Shell>
|
||||||
|
</buildSteps>
|
||||||
|
</org.jenkinsci.plugins.preSCMbuildstep.PreSCMBuildStepsWrapper>
|
||||||
|
</buildWrappers>
|
||||||
|
</project>
|
12
tests/yamlparser/fixtures/unicode001.yaml
Normal file
12
tests/yamlparser/fixtures/unicode001.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
- wrapper:
|
||||||
|
name: unicode-wrapper
|
||||||
|
wrappers:
|
||||||
|
- pre-scm-buildstep:
|
||||||
|
- shell: |
|
||||||
|
#!/bin/bash
|
||||||
|
echo "Unicode! ☃"
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: test-unicode-wrapper
|
||||||
|
wrappers:
|
||||||
|
- unicode-wrapper
|
Loading…
Reference in New Issue
Block a user