yoloserv/awesome_venv/lib/python3.10/site-packages/fire/parser_test.py

144 lines
6.3 KiB
Python

# Copyright (C) 2018 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Tests for the parser module."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from fire import parser
from fire import testutils
class ParserTest(testutils.BaseTestCase):
def testCreateParser(self):
self.assertIsNotNone(parser.CreateParser())
def testSeparateFlagArgs(self):
self.assertEqual(parser.SeparateFlagArgs([]), ([], []))
self.assertEqual(parser.SeparateFlagArgs(['a', 'b']), (['a', 'b'], []))
self.assertEqual(parser.SeparateFlagArgs(['a', 'b', '--']),
(['a', 'b'], []))
self.assertEqual(parser.SeparateFlagArgs(['a', 'b', '--', 'c']),
(['a', 'b'], ['c']))
self.assertEqual(parser.SeparateFlagArgs(['--']),
([], []))
self.assertEqual(parser.SeparateFlagArgs(['--', 'c', 'd']),
([], ['c', 'd']))
self.assertEqual(parser.SeparateFlagArgs(['a', 'b', '--', 'c', 'd']),
(['a', 'b'], ['c', 'd']))
self.assertEqual(parser.SeparateFlagArgs(['a', 'b', '--', 'c', 'd', '--']),
(['a', 'b', '--', 'c', 'd'], []))
self.assertEqual(parser.SeparateFlagArgs(['a', 'b', '--', 'c', '--', 'd']),
(['a', 'b', '--', 'c'], ['d']))
def testDefaultParseValueStrings(self):
self.assertEqual(parser.DefaultParseValue('hello'), 'hello')
self.assertEqual(parser.DefaultParseValue('path/file.jpg'), 'path/file.jpg')
self.assertEqual(parser.DefaultParseValue('hello world'), 'hello world')
self.assertEqual(parser.DefaultParseValue('--flag'), '--flag')
def testDefaultParseValueQuotedStrings(self):
self.assertEqual(parser.DefaultParseValue("'hello'"), 'hello')
self.assertEqual(parser.DefaultParseValue("'hello world'"), 'hello world')
self.assertEqual(parser.DefaultParseValue("'--flag'"), '--flag')
self.assertEqual(parser.DefaultParseValue('"hello"'), 'hello')
self.assertEqual(parser.DefaultParseValue('"hello world"'), 'hello world')
self.assertEqual(parser.DefaultParseValue('"--flag"'), '--flag')
def testDefaultParseValueSpecialStrings(self):
self.assertEqual(parser.DefaultParseValue('-'), '-')
self.assertEqual(parser.DefaultParseValue('--'), '--')
self.assertEqual(parser.DefaultParseValue('---'), '---')
self.assertEqual(parser.DefaultParseValue('----'), '----')
self.assertEqual(parser.DefaultParseValue('None'), None)
self.assertEqual(parser.DefaultParseValue("'None'"), 'None')
def testDefaultParseValueNumbers(self):
self.assertEqual(parser.DefaultParseValue('23'), 23)
self.assertEqual(parser.DefaultParseValue('-23'), -23)
self.assertEqual(parser.DefaultParseValue('23.0'), 23.0)
self.assertIsInstance(parser.DefaultParseValue('23'), int)
self.assertIsInstance(parser.DefaultParseValue('23.0'), float)
self.assertEqual(parser.DefaultParseValue('23.5'), 23.5)
self.assertEqual(parser.DefaultParseValue('-23.5'), -23.5)
def testDefaultParseValueStringNumbers(self):
self.assertEqual(parser.DefaultParseValue("'23'"), '23')
self.assertEqual(parser.DefaultParseValue("'23.0'"), '23.0')
self.assertEqual(parser.DefaultParseValue("'23.5'"), '23.5')
self.assertEqual(parser.DefaultParseValue('"23"'), '23')
self.assertEqual(parser.DefaultParseValue('"23.0"'), '23.0')
self.assertEqual(parser.DefaultParseValue('"23.5"'), '23.5')
def testDefaultParseValueQuotedStringNumbers(self):
self.assertEqual(parser.DefaultParseValue('"\'123\'"'), "'123'")
def testDefaultParseValueOtherNumbers(self):
self.assertEqual(parser.DefaultParseValue('1e5'), 100000.0)
def testDefaultParseValueLists(self):
self.assertEqual(parser.DefaultParseValue('[1, 2, 3]'), [1, 2, 3])
self.assertEqual(parser.DefaultParseValue('[1, "2", 3]'), [1, '2', 3])
self.assertEqual(parser.DefaultParseValue('[1, \'"2"\', 3]'), [1, '"2"', 3])
self.assertEqual(parser.DefaultParseValue(
'[1, "hello", 3]'), [1, 'hello', 3])
def testDefaultParseValueBareWordsLists(self):
self.assertEqual(parser.DefaultParseValue('[one, 2, "3"]'), ['one', 2, '3'])
def testDefaultParseValueDict(self):
self.assertEqual(
parser.DefaultParseValue('{"abc": 5, "123": 1}'), {'abc': 5, '123': 1})
def testDefaultParseValueNone(self):
self.assertEqual(parser.DefaultParseValue('None'), None)
def testDefaultParseValueBool(self):
self.assertEqual(parser.DefaultParseValue('True'), True)
self.assertEqual(parser.DefaultParseValue('False'), False)
def testDefaultParseValueBareWordsTuple(self):
self.assertEqual(parser.DefaultParseValue('(one, 2, "3")'), ('one', 2, '3'))
self.assertEqual(parser.DefaultParseValue('one, "2", 3'), ('one', '2', 3))
def testDefaultParseValueNestedContainers(self):
self.assertEqual(
parser.DefaultParseValue('[(A, 2, "3"), 5, {alph: 10.2, beta: "cat"}]'),
[('A', 2, '3'), 5, {'alph': 10.2, 'beta': 'cat'}])
def testDefaultParseValueComments(self):
self.assertEqual(parser.DefaultParseValue('"0#comments"'), '0#comments')
# Comments are stripped. This behavior may change in the future.
self.assertEqual(parser.DefaultParseValue('0#comments'), 0)
def testDefaultParseValueBadLiteral(self):
# If it can't be parsed, we treat it as a string. This behavior may change.
self.assertEqual(
parser.DefaultParseValue('[(A, 2, "3"), 5'), '[(A, 2, "3"), 5')
self.assertEqual(parser.DefaultParseValue('x=10'), 'x=10')
def testDefaultParseValueSyntaxError(self):
# If it can't be parsed, we treat it as a string.
self.assertEqual(parser.DefaultParseValue('"'), '"')
def testDefaultParseValueIgnoreBinOp(self):
self.assertEqual(parser.DefaultParseValue('2017-10-10'), '2017-10-10')
self.assertEqual(parser.DefaultParseValue('1+1'), '1+1')
if __name__ == '__main__':
testutils.main()