Skip to content

Commit

Permalink
add validate_messages target and use for travis
Browse files Browse the repository at this point in the history
  • Loading branch information
flixr committed Jan 23, 2016
1 parent b13dd7a commit 710b631
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
language: python
script: make validate_messages
7 changes: 6 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,9 @@ clean :
uninstall: clean
$(Q)rm -rf var bin build $(MESSAGES_INCLUDE) $(MESSAGES_LIB)

.PHONY: all libs generators ocaml_lib_v1 pre_messages_dir post_messages_install gen_messages pygen_messages messages pymessages clean uninstall
validate_messages:
$(Q)./tools/generator/gen_messages.py --only-validate $(MESSAGES_XML) telemetry
$(Q)./tools/generator/gen_messages.py --only-validate $(MESSAGES_XML) datalink
$(Q)./tools/generator/gen_messages.py --only-validate $(MESSAGES_XML) intermcu

.PHONY: all libs generators ocaml_lib_v1 pre_messages_dir post_messages_install gen_messages pygen_messages messages pymessages clean uninstall validate_messages
17 changes: 15 additions & 2 deletions tools/generator/gen_messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,21 @@ def pprz_validate(fname, schema, errorLimitNumber) :
"""Uses minixsv to validate an XML file with a given XSD schema file. We define pprz_validate
here because it relies on the XML libs that were loaded in gen_messages(), so it can't be called standalone"""
# use default values of minixsv, location of the schema file must be specified in the XML file
domTreeWrapper = pyxsval.parseAndValidate(fname, xsdFile=schema, errorLimit=errorLimitNumber)
try:
domTreeWrapper = pyxsval.parseAndValidate(fname, xsdFile=schema, errorLimit=errorLimitNumber)
except pyxsval.XsvalError, errstr:
print(errstr)
return 1
except GenXmlIfError, errstr:
print(errstr)
return 1
return 0

# Process XML file, validating as necessary.
validation_result = 0
if opts.validate:
print("Validating %s" % fname)
pprz_validate(fname, schemaFile, opts.error_limit);
validation_result = pprz_validate(fname, schemaFile, opts.error_limit)
else:
print("Validation skipped for %s." % fname)

Expand All @@ -66,6 +75,9 @@ def pprz_validate(fname, schema, errorLimitNumber) :
print("Found %u PPPRZLink message types in XML file %s" % (
pprz_parse.total_msgs(xml), fname))

if opts.only_validate:
sys.exit(validation_result)

# Convert language option to lowercase and validate
opts.language = opts.language.lower()
if opts.language == 'c':
Expand All @@ -84,6 +96,7 @@ def pprz_validate(fname, schema, errorLimitNumber) :
parser.add_argument("--lang", dest="language", choices=supportedLanguages, default=DEFAULT_LANGUAGE, help="language of generated code [default: %(default)s]")
parser.add_argument("--protocol", choices=[pprz_parse.PROTOCOL_1_0], default=DEFAULT_PROTOCOL, help="PPRZLink protocol version. [default: %(default)s]")
parser.add_argument("--no-validate", action="store_false", dest="validate", default=DEFAULT_VALIDATE, help="Do not perform XML validation. Can speed up code generation if XML files are known to be correct.")
parser.add_argument("--only-validate", action="store_true", dest="only_validate", help="Only validate messages without generation.")
parser.add_argument("--error-limit", default=DEFAULT_ERROR_LIMIT, help="maximum number of validation errors to display")
parser.add_argument("definition", metavar="XML", help="PPRZLink messages definition")
parser.add_argument("class_name", help="PPRZLink message class to parse and generate")
Expand Down

0 comments on commit 710b631

Please sign in to comment.