Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split server/w_getopt.py. #675

Merged
merged 5 commits into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion comtypes/server/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
import comtypes
from comtypes.typeinfo import LoadTypeLibEx, UnRegisterTypeLib, REGKIND_REGISTER
from comtypes.hresult import *
from comtypes.server import _w_getopt as w_getopt
from comtypes.server import w_getopt
import comtypes.server.inprocserver
from ctypes import windll, c_ulong, c_wchar_p, WinError, sizeof, create_string_buffer

Expand Down
32 changes: 0 additions & 32 deletions comtypes/server/_w_getopt.py → comtypes/server/w_getopt.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,35 +41,3 @@ def w_getopt(args, options):
args = args[1:]

return opts, arguments


if __debug__:
if __name__ == "__main__":
import unittest

class TestCase(unittest.TestCase):
def test_1(self):
args = "-embedding spam /RegServer foo /UnregSERVER blabla".split()
opts, args = w_getopt(args, "regserver unregserver embedding".split())
self.assertEqual(
opts, [("embedding", ""), ("regserver", ""), ("unregserver", "")]
)
self.assertEqual(args, ["spam", "foo", "blabla"])

def test_2(self):
args = "/TLB Hello.Tlb HELLO.idl".split()
opts, args = w_getopt(args, ["tlb:"])
self.assertEqual(opts, [("tlb", "Hello.Tlb")])
self.assertEqual(args, ["HELLO.idl"])

def test_3(self):
# Invalid option
self.assertRaises(
GetoptError, w_getopt, "/TLIB hello.tlb hello.idl".split(), ["tlb:"]
)

def test_4(self):
# Missing argument
self.assertRaises(GetoptError, w_getopt, "/TLB".split(), ["tlb:"])

unittest.main()
104 changes: 29 additions & 75 deletions comtypes/test/test_w_getopt.py
Original file line number Diff line number Diff line change
@@ -1,75 +1,29 @@
class GetoptError(Exception):
pass


def w_getopt(args, options):
"""A getopt for Windows.

Options may start with either '-' or '/', the option names may
have more than one letter (/tlb or -RegServer), and option names
are case insensitive.

Returns two elements, just as getopt.getopt. The first is a list
of (option, value) pairs in the same way getopt.getopt does, but
there is no '-' or '/' prefix to the option name, and the option
name is always lower case. The second is the list of arguments
which do not belong to an option.

Different from getopt.getopt, a single argument not belonging to an option
does not terminate parsing.
"""
opts = []
arguments = []
while args:
if args[0][:1] in "/-":
arg = args[0][1:] # strip the '-' or '/'
arg = arg.lower()

if arg + ":" in options:
try:
opts.append((arg, args[1]))
except IndexError:
raise GetoptError(f"option '{args[0]}' requires an argument")
args = args[1:]
elif arg in options:
opts.append((arg, ""))
else:
raise GetoptError(f"invalid option '{args[0]}'")
args = args[1:]
else:
arguments.append(args[0])
args = args[1:]

return opts, arguments


if __debug__:
if __name__ == "__main__":
import unittest

class TestCase(unittest.TestCase):
def test_1(self):
args = "-embedding spam /RegServer foo /UnregSERVER blabla".split()
opts, args = w_getopt(args, "regserver unregserver embedding".split())
self.assertEqual(
opts, [("embedding", ""), ("regserver", ""), ("unregserver", "")]
)
self.assertEqual(args, ["spam", "foo", "blabla"])

def test_2(self):
args = "/TLB Hello.Tlb HELLO.idl".split()
opts, args = w_getopt(args, ["tlb:"])
self.assertEqual(opts, [("tlb", "Hello.Tlb")])
self.assertEqual(args, ["HELLO.idl"])

def test_3(self):
# Invalid option
self.assertRaises(
GetoptError, w_getopt, "/TLIB hello.tlb hello.idl".split(), ["tlb:"]
)

def test_4(self):
# Missing argument
self.assertRaises(GetoptError, w_getopt, "/TLB".split(), ["tlb:"])

unittest.main()
import unittest

from comtypes.server.w_getopt import GetoptError, w_getopt


class TestCase(unittest.TestCase):
def test_1(self):
args = "-embedding spam /RegServer foo /UnregSERVER blabla".split()
opts, args = w_getopt(args, "regserver unregserver embedding".split())
self.assertEqual(
opts, [("embedding", ""), ("regserver", ""), ("unregserver", "")]
)
self.assertEqual(args, ["spam", "foo", "blabla"])

def test_2(self):
args = "/TLB Hello.Tlb HELLO.idl".split()
opts, args = w_getopt(args, ["tlb:"])
self.assertEqual(opts, [("tlb", "Hello.Tlb")])
self.assertEqual(args, ["HELLO.idl"])

def test_3(self):
# Invalid option
self.assertRaises(
GetoptError, w_getopt, "/TLIB hello.tlb hello.idl".split(), ["tlb:"]
)

def test_4(self):
# Missing argument
self.assertRaises(GetoptError, w_getopt, "/TLB".split(), ["tlb:"])