def test_replace_backreference(): builder = BistrBuilder("it doesn't work and stuff doesn't get replaced") builder.replace_all(r"\bdoesn't (\S+)", r'\1s') bs = builder.build() assert bs.original == "it doesn't work and stuff doesn't get replaced" assert bs.modified == 'it works and stuff gets replaced'
def test_replace_matches(): builder = BistrBuilder( 'the cheese that the mouse that the cat that the dog chased played with ate' ) builder.replace_next(r'that', 'which') builder.replace_all(r'that', 'whom') bs = builder.build() assert bs.original == 'the cheese that the mouse that the cat that the dog chased played with ate' assert bs.modified == 'the cheese which the mouse whom the cat whom the dog chased played with ate'
def test_iterative(): builder = BistrBuilder("I wish I wouldn't've spent one thousand dollars.") builder.skip_match(r'[^.]*') builder.discard_rest() builder.rewind() builder.skip_match(r'I wish I ') builder.replace_match(r"wouldn't've", 'would not have') builder.skip_match(r' spent ') builder.replace_match(r'one thousand dollars', '$1,000') bs = builder.build() assert bs.original == "I wish I wouldn't've spent one thousand dollars." assert bs.modified == 'I wish I would not have spent $1,000'
def test_empty_string(): builder = BistrBuilder('') bs = builder.build() assert bs.original == '' assert bs.modified == '' assert bs[0:0].original == ''
def test_chunk_words(): builder = BistrBuilder(' the quick brown fox ') builder.discard(2) builder.replace(3, 'the') builder.skip(1) builder.replace(5, 'quick') builder.replace(2, ' ') builder.replace(5, 'brown') builder.skip(1) builder.replace(3, 'fox') builder.discard(1) bs = builder.build() assert bs.original == ' the quick brown fox ' assert bs.modified == 'the quick brown fox' assert bs[0:1].original == 'the' assert bs[1:2].original == 'the' assert bs[2:3].original == 'the' assert bs[0:3].original == 'the' assert bs[1:3].original == 'the' assert bs[0:4].original == 'the ' assert bs[1:4].original == 'the ' assert bs[3:4].original == ' ' assert bs[9:10].original == ' ' assert bs[4:15].original == 'quick brown' assert bs[5:14].original == 'quick brown' assert bs[0:0].original == '' assert bs[10:10].original == ''
def test_chunk_chars(): builder = BistrBuilder(' the quick brown fox ') builder.discard_match(r'\s+') while not builder.is_complete: builder.skip_match(r'\S+') builder.replace_match(r'\s+(?=\S)', ' ') builder.discard_match(r'\s+$') bs = builder.build() assert bs.original == ' the quick brown fox ' assert bs.modified == 'the quick brown fox' assert bs[0:1].original == 't' assert bs[1:2].original == 'h' assert bs[2:3].original == 'e' assert bs[0:3].original == 'the' assert bs[1:3].original == 'he' assert bs[0:4].original == 'the ' assert bs[1:4].original == 'he ' assert bs[3:4].original == ' ' assert bs[9:10].original == ' ' assert bs[4:15].original == 'quick brown' assert bs[5:14].original == 'uick brow' assert bs[0:0].original == '' assert bs[10:10].original == ''
def test_append(): builder = BistrBuilder('hello WORLD') builder.append(bistr(builder.peek(5)).upper('en_US')) builder.skip(1) builder.append(bistr(builder.peek(5)).lower('en_US')) bs = builder.build() assert bs[1:4] == bistr('ell', 'ELL', Alignment.identity(3)) assert bs[7:10] == bistr('ORL', 'orl', Alignment.identity(3))