1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3# pylint: disable=no-self-use, pointless-statement, missing-docstring, no-member, len-as-condition 4 5from ..pattern import StringPattern, RePattern 6from ..processors import ConflictSolver 7from ..rules import execute_rule 8from ..match import Matches 9 10 11def test_conflict_1(): 12 input_string = "abcdefghijklmnopqrstuvwxyz" 13 14 pattern = StringPattern("ijklmn", "kl", "abcdef", "ab", "ef", "yz") 15 matches = Matches(pattern.matches(input_string)) 16 17 execute_rule(ConflictSolver(), matches, None) 18 19 values = [x.value for x in matches] 20 21 assert values == ["ijklmn", "abcdef", "yz"] 22 23 24def test_conflict_2(): 25 input_string = "abcdefghijklmnopqrstuvwxyz" 26 27 pattern = StringPattern("ijklmn", "jklmnopqrst") 28 matches = Matches(pattern.matches(input_string)) 29 30 execute_rule(ConflictSolver(), matches, None) 31 32 values = [x.value for x in matches] 33 34 assert values == ["jklmnopqrst"] 35 36 37def test_conflict_3(): 38 input_string = "abcdefghijklmnopqrstuvwxyz" 39 40 pattern = StringPattern("ijklmnopqrst", "jklmnopqrst") 41 matches = Matches(pattern.matches(input_string)) 42 43 execute_rule(ConflictSolver(), matches, None) 44 45 values = [x.value for x in matches] 46 47 assert values == ["ijklmnopqrst"] 48 49 50def test_conflict_4(): 51 input_string = "123456789" 52 53 pattern = StringPattern("123", "456789") 54 matches = Matches(pattern.matches(input_string)) 55 56 execute_rule(ConflictSolver(), matches, None) 57 58 values = [x.value for x in matches] 59 assert values == ["123", "456789"] 60 61 62def test_conflict_5(): 63 input_string = "123456789" 64 65 pattern = StringPattern("123456", "789") 66 matches = Matches(pattern.matches(input_string)) 67 68 execute_rule(ConflictSolver(), matches, None) 69 70 values = [x.value for x in matches] 71 assert values == ["123456", "789"] 72 73 74def test_prefer_longer_parent(): 75 input_string = "xxx.1x02.xxx" 76 77 re1 = RePattern("([0-9]+)x([0-9]+)", name='prefer', children=True, formatter=int) 78 re2 = RePattern("x([0-9]+)", name='skip', children=True) 79 80 matches = Matches(re1.matches(input_string)) 81 matches.extend(re2.matches(input_string)) 82 83 execute_rule(ConflictSolver(), matches, None) 84 assert len(matches) == 2 85 assert matches[0].value == 1 86 assert matches[1].value == 2 87 88 89def test_conflict_solver_1(): 90 input_string = "123456789" 91 92 re1 = StringPattern("2345678", conflict_solver=lambda match, conflicting: '__default__') 93 re2 = StringPattern("34567") 94 95 matches = Matches(re1.matches(input_string)) 96 matches.extend(re2.matches(input_string)) 97 98 execute_rule(ConflictSolver(), matches, None) 99 assert len(matches) == 1 100 assert matches[0].value == "2345678" 101 102 103def test_conflict_solver_2(): 104 input_string = "123456789" 105 106 re1 = StringPattern("2345678", conflict_solver=lambda match, conflicting: '__default__') 107 re2 = StringPattern("34567", conflict_solver=lambda match, conflicting: conflicting) 108 109 matches = Matches(re1.matches(input_string)) 110 matches.extend(re2.matches(input_string)) 111 112 execute_rule(ConflictSolver(), matches, None) 113 assert len(matches) == 1 114 assert matches[0].value == "34567" 115 116 117def test_conflict_solver_3(): 118 input_string = "123456789" 119 120 re1 = StringPattern("2345678", conflict_solver=lambda match, conflicting: match) 121 re2 = StringPattern("34567") 122 123 matches = Matches(re1.matches(input_string)) 124 matches.extend(re2.matches(input_string)) 125 126 execute_rule(ConflictSolver(), matches, None) 127 assert len(matches) == 1 128 assert matches[0].value == "34567" 129 130 131def test_conflict_solver_4(): 132 input_string = "123456789" 133 134 re1 = StringPattern("2345678") 135 re2 = StringPattern("34567", conflict_solver=lambda match, conflicting: conflicting) 136 137 matches = Matches(re1.matches(input_string)) 138 matches.extend(re2.matches(input_string)) 139 140 execute_rule(ConflictSolver(), matches, None) 141 assert len(matches) == 1 142 assert matches[0].value == "34567" 143 144 145def test_conflict_solver_5(): 146 input_string = "123456789" 147 148 re1 = StringPattern("2345678", conflict_solver=lambda match, conflicting: conflicting) 149 re2 = StringPattern("34567") 150 151 matches = Matches(re1.matches(input_string)) 152 matches.extend(re2.matches(input_string)) 153 154 execute_rule(ConflictSolver(), matches, None) 155 assert len(matches) == 1 156 assert matches[0].value == "2345678" 157 158 159def test_conflict_solver_6(): 160 input_string = "123456789" 161 162 re1 = StringPattern("2345678") 163 re2 = StringPattern("34567", conflict_solver=lambda match, conflicting: conflicting) 164 165 matches = Matches(re1.matches(input_string)) 166 matches.extend(re2.matches(input_string)) 167 168 execute_rule(ConflictSolver(), matches, None) 169 assert len(matches) == 1 170 assert matches[0].value == "34567" 171 172 173def test_conflict_solver_7(): 174 input_string = "102" 175 176 re1 = StringPattern("102") 177 re2 = StringPattern("02") 178 179 matches = Matches(re2.matches(input_string)) 180 matches.extend(re1.matches(input_string)) 181 182 execute_rule(ConflictSolver(), matches, None) 183 assert len(matches) == 1 184 assert matches[0].value == "102" 185 186 187def test_unresolved(): 188 input_string = "123456789" 189 190 re1 = StringPattern("23456") 191 re2 = StringPattern("34567") 192 193 matches = Matches(re1.matches(input_string)) 194 matches.extend(re2.matches(input_string)) 195 196 execute_rule(ConflictSolver(), matches, None) 197 assert len(matches) == 2 198 199 re1 = StringPattern("34567") 200 re2 = StringPattern("2345678", conflict_solver=lambda match, conflicting: None) 201 202 matches = Matches(re1.matches(input_string)) 203 matches.extend(re2.matches(input_string)) 204 205 execute_rule(ConflictSolver(), matches, None) 206 assert len(matches) == 2 207 208 re1 = StringPattern("34567", conflict_solver=lambda match, conflicting: None) 209 re2 = StringPattern("2345678") 210 211 matches = Matches(re1.matches(input_string)) 212 matches.extend(re2.matches(input_string)) 213 214 execute_rule(ConflictSolver(), matches, None) 215 assert len(matches) == 2 216