1a5f9918aSopenharmony_ci 2a5f9918aSopenharmony_ciimport yaml 3a5f9918aSopenharmony_ciimport pprint 4a5f9918aSopenharmony_ci 5a5f9918aSopenharmony_ci# Tokens mnemonic: 6a5f9918aSopenharmony_ci# directive: % 7a5f9918aSopenharmony_ci# document_start: --- 8a5f9918aSopenharmony_ci# document_end: ... 9a5f9918aSopenharmony_ci# alias: * 10a5f9918aSopenharmony_ci# anchor: & 11a5f9918aSopenharmony_ci# tag: ! 12a5f9918aSopenharmony_ci# scalar _ 13a5f9918aSopenharmony_ci# block_sequence_start: [[ 14a5f9918aSopenharmony_ci# block_mapping_start: {{ 15a5f9918aSopenharmony_ci# block_end: ]} 16a5f9918aSopenharmony_ci# flow_sequence_start: [ 17a5f9918aSopenharmony_ci# flow_sequence_end: ] 18a5f9918aSopenharmony_ci# flow_mapping_start: { 19a5f9918aSopenharmony_ci# flow_mapping_end: } 20a5f9918aSopenharmony_ci# entry: , 21a5f9918aSopenharmony_ci# key: ? 22a5f9918aSopenharmony_ci# value: : 23a5f9918aSopenharmony_ci 24a5f9918aSopenharmony_ci_replaces = { 25a5f9918aSopenharmony_ci yaml.DirectiveToken: '%', 26a5f9918aSopenharmony_ci yaml.DocumentStartToken: '---', 27a5f9918aSopenharmony_ci yaml.DocumentEndToken: '...', 28a5f9918aSopenharmony_ci yaml.AliasToken: '*', 29a5f9918aSopenharmony_ci yaml.AnchorToken: '&', 30a5f9918aSopenharmony_ci yaml.TagToken: '!', 31a5f9918aSopenharmony_ci yaml.ScalarToken: '_', 32a5f9918aSopenharmony_ci yaml.BlockSequenceStartToken: '[[', 33a5f9918aSopenharmony_ci yaml.BlockMappingStartToken: '{{', 34a5f9918aSopenharmony_ci yaml.BlockEndToken: ']}', 35a5f9918aSopenharmony_ci yaml.FlowSequenceStartToken: '[', 36a5f9918aSopenharmony_ci yaml.FlowSequenceEndToken: ']', 37a5f9918aSopenharmony_ci yaml.FlowMappingStartToken: '{', 38a5f9918aSopenharmony_ci yaml.FlowMappingEndToken: '}', 39a5f9918aSopenharmony_ci yaml.BlockEntryToken: ',', 40a5f9918aSopenharmony_ci yaml.FlowEntryToken: ',', 41a5f9918aSopenharmony_ci yaml.KeyToken: '?', 42a5f9918aSopenharmony_ci yaml.ValueToken: ':', 43a5f9918aSopenharmony_ci} 44a5f9918aSopenharmony_ci 45a5f9918aSopenharmony_cidef test_tokens(data_filename, tokens_filename, verbose=False): 46a5f9918aSopenharmony_ci tokens1 = [] 47a5f9918aSopenharmony_ci with open(tokens_filename, 'r') as file: 48a5f9918aSopenharmony_ci tokens2 = file.read().split() 49a5f9918aSopenharmony_ci try: 50a5f9918aSopenharmony_ci with open(data_filename, 'rb') as file: 51a5f9918aSopenharmony_ci for token in yaml.scan(file): 52a5f9918aSopenharmony_ci if not isinstance(token, (yaml.StreamStartToken, yaml.StreamEndToken)): 53a5f9918aSopenharmony_ci tokens1.append(_replaces[token.__class__]) 54a5f9918aSopenharmony_ci finally: 55a5f9918aSopenharmony_ci if verbose: 56a5f9918aSopenharmony_ci print("TOKENS1:", ' '.join(tokens1)) 57a5f9918aSopenharmony_ci print("TOKENS2:", ' '.join(tokens2)) 58a5f9918aSopenharmony_ci assert len(tokens1) == len(tokens2), (tokens1, tokens2) 59a5f9918aSopenharmony_ci for token1, token2 in zip(tokens1, tokens2): 60a5f9918aSopenharmony_ci assert token1 == token2, (token1, token2) 61a5f9918aSopenharmony_ci 62a5f9918aSopenharmony_citest_tokens.unittest = ['.data', '.tokens'] 63a5f9918aSopenharmony_ci 64a5f9918aSopenharmony_cidef test_scanner(data_filename, canonical_filename, verbose=False): 65a5f9918aSopenharmony_ci for filename in [data_filename, canonical_filename]: 66a5f9918aSopenharmony_ci tokens = [] 67a5f9918aSopenharmony_ci try: 68a5f9918aSopenharmony_ci with open(filename, 'rb') as file: 69a5f9918aSopenharmony_ci for token in yaml.scan(file): 70a5f9918aSopenharmony_ci tokens.append(token.__class__.__name__) 71a5f9918aSopenharmony_ci finally: 72a5f9918aSopenharmony_ci if verbose: 73a5f9918aSopenharmony_ci pprint.pprint(tokens) 74a5f9918aSopenharmony_ci 75a5f9918aSopenharmony_citest_scanner.unittest = ['.data', '.canonical'] 76a5f9918aSopenharmony_ci 77a5f9918aSopenharmony_ciif __name__ == '__main__': 78a5f9918aSopenharmony_ci import test_appliance 79a5f9918aSopenharmony_ci test_appliance.run(globals()) 80a5f9918aSopenharmony_ci 81