示例#1
0
def test_without():
    l1 = Localization.from_dict({
        'foo.c:1': 1.0,
        'foo.c:2': 0.5,
        'foo.c:3': 0.1
    })

    l2 = l1.without(l('foo.c:2'))
    assert l2 == \
        Localization.from_dict({
            'foo.c:1': 1.0,
            'foo.c:3': 0.1
        })

    l3 = l2.without(l('foo.c:2'))
    assert l3 == \
        Localization.from_dict({
            'foo.c:1': 1.0,
            'foo.c:3': 0.1
        })

    l4 = l3.without(l('foo.c:1'))
    assert l4 == \
        Localization.from_dict({
            'foo.c:3': 0.1
        })

    with pytest.raises(darjeeling.exceptions.NoImplicatedLines):
        l4.without(l('foo.c:3'))
示例#2
0
def test_files():
    loc = Localization.from_dict({
        'foo.c:1': 1.0,
        'foo.c:2': 1.0,
        'bar.c:1': 1.0
    })
    assert set(loc.files) == {'foo.c', 'bar.c'}
示例#3
0
def test_to_and_from_dict():
    loc = Localization({
        l('foo.c:1'): 1.0,
        l('foo.c:2'): 0.1,
        l('foo.c:3'): 0.5,
        l('bar.c:9'): 0.1
    })

    dict_expected = {
        'foo.c:1': 1.0,
        'foo.c:2': 0.1,
        'foo.c:3': 0.5,
        'bar.c:9': 0.1
    }

    assert loc.to_dict() == dict_expected
    assert Localization.from_dict(dict_expected) == loc
示例#4
0
def test_contains():
    loc = Localization.from_dict({
        'foo.c:1': 1.0,
        'foo.c:2': 1.0,
        'foo.c:3': 1.0
    })
    assert l('foo.c:1') in loc
    assert l('foo.c:2') in loc
    assert l('foo.c:3') in loc
    assert l('foo.c:4') not in loc
    assert l('bar.c:1') not in loc
示例#5
0
def test_get():
    loc = Localization.from_dict({
        'foo.c:1': 1.0,
        'foo.c:2': 0.5,
        'foo.c:3': 0.1
    })
    assert loc[l('foo.c:1')] == 1.0
    assert loc[l('foo.c:2')] == 0.5
    assert loc[l('foo.c:3')] == 0.1
    assert loc[l('foo.c:4')] == 0.0
    assert loc[l('bar.c:1')] == 0.0
示例#6
0
def test_iter():
    loc = Localization.from_dict({
        'foo.c:1': 1.0,
        'foo.c:2': 1.0,
        'foo.c:3': 1.0
    })

    lines_expected = \
        {l('foo.c:1'), l('foo.c:2'), l('foo.c:3')}
    lines_actual = set(loc)

    assert lines_expected == lines_actual
示例#7
0
def test_eq():
    l1 = Localization({
        l('foo.c:1'): 1.0,
        l('foo.c:2'): 0.1,
        l('foo.c:3'): 0.5,
        l('bar.c:9'): 0.1
    })
    l2 = Localization({
        l('foo.c:1'): 1.0,
        l('foo.c:2'): 0.1,
        l('foo.c:3'): 0.5,
        l('bar.c:9'): 0.1
    })
    l3 = Localization({l('foo.c:2'): 0.1, l('foo.c:3'): 0.5})

    assert l1 == l2
    assert l2 == l1
    assert l1 != l3
    assert l3 != l1
    assert l2 != l3
    assert l3 != l2
示例#8
0
 def obtain_localization(self, coverage):
     # type: (TestSuiteCoverage) -> Localization
     fn = self.app.pargs.localization
     if not fn:
         logger.info("no localization file provided")
         logger.info("computing fault localization")
         localization = start_repair.localize(coverage)
         logger.info("computed fault localization:\n%s",
                     indent(repr(localization), 2))
     else:
         logger.info("loading localization from file: %s", fn)
         localization = Localization.from_file(fn)
         logger.info("loaded localization from file:\n%s",
                     indent(repr(localization), 2))
     return localization
示例#9
0
def test_exclude_files():
    loc = Localization.from_dict({
        'foo.c:1': 1.0,
        'foo.c:2': 1.0,
        'foo.c:3': 1.0,
        'bar.c:1': 1.0,
        'bar.c:2': 1.0,
        'woo.c:1': 1.0
    })

    assert len(loc.exclude_files([])) == 6
    assert len(loc.exclude_files(['buzz.c'])) == 6
    assert len(loc.exclude_files(['foo.c'])) == 3
    assert len(loc.exclude_files(['bar.c'])) == 4
    assert len(loc.exclude_files(['woo.c'])) == 5
    assert len(loc.exclude_files(['bar.c', 'woo.c'])) == 3
    assert len(loc.exclude_files(['bar.c', 'foo.c'])) == 1
示例#10
0
def test_restrict_to_lines():
    loc = Localization.from_dict({
        'foo.c:1': 1.0,
        'foo.c:2': 0.5,
        'foo.c:3': 0.1
    })

    restricted_to = {l('foo.c:1'), l('foo.c:2')}
    assert set(loc.restrict_to_lines(restricted_to)) == restricted_to

    restricted_to = {l('foo.c:1'), l('foo.c:2'), l('bar.c:7')}
    assert set(loc.restrict_to_lines(restricted_to)) == {
            l('foo.c:1'), l('foo.c:2')}

    restricted_to = {l('foo.c:1')}
    assert set(loc.restrict_to_lines(restricted_to)) == restricted_to

    with pytest.raises(darjeeling.exceptions.NoImplicatedLines):
        loc.restrict_to_lines({})
示例#11
0
 def ld(lines: List[str]) -> Localization:
     return Localization({l: 1.0 for l in fl(lines)})
示例#12
0
def test_empty_throws_exception():
    with pytest.raises(darjeeling.exceptions.NoImplicatedLines):
        Localization({})
示例#13
0
def localize(coverage):
    # type: (TestSuiteCoverage) -> Localization
    return Localization.from_coverage(coverage, metric)