• Jérome Perrin's avatar
    tests: stop using deprecated unittest.makeSuite · 054896eb
    Jérome Perrin authored
    done with:
    
    ```py
    import libcst as cst
    import sys
    
    class RewriteMakeSuite(cst.CSTTransformer):
        def leave_Call(self, original_node: cst.Call, updated_node: cst.Call) -> cst.BaseExpression:
            func = updated_node.func
            if isinstance(func, cst.Attribute) and isinstance(func.value, cst.Name):
                if func.value.value == "unittest" and func.attr.value == "makeSuite":
                    first_arg = updated_node.args[0]
    
                    # check second argument
                    if len(updated_node.args) > 1:
                        second = updated_node.args[1].value
                        if isinstance(second, cst.SimpleString):
                            val = second.evaluated_value
                            if val != "test":
                                print(f"ERROR: unexpected second argument {second.code!r} in {original_node.code!r}", file=sys.stderr)
                                return updated_node
                        else:
                            print(f"ERROR: non-string second argument in {original_node.code!r}", file=sys.stderr)
                            return updated_node
    
                    # keep only first argument and remove comma
                    new_args = [first_arg.with_changes(comma=None)]
    
                    new_func = cst.Attribute(
                        value=cst.Attribute(
                            value=cst.Name("unittest"),
                            attr=cst.Name("defaultTestLoader"),
                        ),
                        attr=cst.Name("loadTestsFromTestCase"),
                    )
                    return updated_node.with_changes(func=new_func, args=new_args)
            return updated_node
    
    if __name__ == "__main__":
        for path in sys.argv[1:]:
            src = open(path).read()
            mod = cst.parse_module(src)
            new_mod = mod.visit(RewriteMakeSuite())
            with open(path, "w") as f:
                f.write(new_mod.code)
    
    ```
    054896eb