Skip to content

Tests are not generated for classes that have inner classes #1850

Closed
@tochilinak

Description

@tochilinak

Description

Tests are not generated for classes that have inner classes.

To Reproduce

Steps to reproduce the behavior:

  1. Add this code to Python project:
class Outer:
    class Inner:
        a = 1

        def inc(self):
            self.a += 1

    def __init__(self):
        self.inner = Outer.Inner()

    def inc1(self):
        self.inner.inc()
  1. Use plugin to generate tests

Expected behavior

Tests are supposed to be generated.

Actual behavior

Tests were not generated.

Visual proofs (screenshots, logs, images)

When test generation is started from CLI with --verbosity=DEBUG key, the following error is shown:

13:57:44.822 | DEBUG | PythonEngine | Traceback (most recent call last):
  File "/tmp/UTBot/python-test-generation-07779351610767258346/tmp_27_run_inc1.py", line 5, in <module>
    import easy_samples.sample_classes.Outer
ModuleNotFoundError: No module named 'easy_samples.sample_classes.Outer'; 'easy_samples.sample_classes' is not a package

Additional context

We have incorrect logic of getting module name for PythonClassId in utbot-python/src/main/kotlin/org/utbot/python/framework/api/python/util/PythonIdUtils.kt:4:

fun moduleOfType(typeName: String): String? {
    val lastIndex = typeName.lastIndexOf('.')
    return if (lastIndex == -1) null else typeName.substring(0, lastIndex)
}

In this case it splits easy_samples.sample_classes.Outer.Inner into (easy_samples.sample_classes.Outer, Inner), but should be (easy_samples.sample_classes, Outer.Inner).

utbot_mypy_runner splits this correctly.

Metadata

Metadata

Labels

comp-fuzzingIssue is related to the fuzzingctg-bugIssue is a buglang-pythonIssue is related to python support

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions