public String migrate(String formattedString, String toBeFormattedString) { return migrate(formattedString, toBeFormattedString, WS); }
public String migrate(String formattedString, String toBeFormattedString, Pattern format) { if (Strings.isEmpty(toBeFormattedString) || Strings.isEmpty(formattedString)) return toBeFormattedString; FormattedString formatted = createFormattedString(formattedString, format); FormattedString toBeFormatted = createFormattedString(toBeFormattedString, format); if (formatted.semantic.equals(toBeFormatted.semantic)) return formattedString; List<Mapping> mappings = Lists.newArrayList(); List<Region> remainingRegions = Lists.newArrayList(); findLinearMatches(formatted, toBeFormatted, mappings, remainingRegions); for (Mapping m : mappings) toBeFormatted.migrateFrom(formatted, m); return toBeFormatted.toString(); }
protected void findLinearMatches(FormattedString formattedString, FormattedString toBeFormattedString, List<Mapping> mappings, List<Region> remainingRegions) { int i1 = 0; int i2 = 0; while (i1 < formattedString.length() && i2 < toBeFormattedString.length()) { int match = countOverlappingChars(formattedString, toBeFormattedString, i1, i2); if (match > 0) { mappings.add(new Mapping(formattedString, toBeFormattedString, i1, i2, match)); i1 += match; i2 += match; } if (i1 >= formattedString.length() || i2 >= toBeFormattedString.length()) return; int[] next = findNextOverlappingChar(formattedString, toBeFormattedString, i1, i2); if (next == null) { remainingRegions.add(new Region(i2, toBeFormattedString.length() - i2)); return; } remainingRegions.add(new Region(i2, next[1])); i1 += next[0]; i2 += next[1]; } }
public void validate(XtextResource resource, IExpectation expectation, @TestResult String actual) { Assert.assertNotNull(resource); Assert.assertNotNull(expectation); Assert.assertNotNull(expectation.getExpectation()); Assert.assertNotNull(actual); String exp; if (!config.whitespaceSensitive()) { FormattingMigrator migrator = new FormattingMigrator(); exp = migrator.migrate(actual, expectation.getExpectation()); } else exp = expectation.getExpectation(); if ((config.caseSensitive() && !exp.equals(actual)) || (!config.caseSensitive() && !exp.equalsIgnoreCase(actual))) { String expDoc = IExpectation.Util.replace(resource, expectation, exp); String actDoc = IExpectation.Util.replace(resource, expectation, actual); throw new ComparisonFailure("", expDoc, actDoc); } } }
public String migrate(String formattedString, String toBeFormattedString, Pattern format) { if (Strings.isEmpty(toBeFormattedString) || Strings.isEmpty(formattedString)) return toBeFormattedString; FormattedString formatted = createFormattedString(formattedString, format); FormattedString toBeFormatted = createFormattedString(toBeFormattedString, format); if (formatted.semantic.equals(toBeFormatted.semantic)) return formattedString; List<Mapping> mappings = Lists.newArrayList(); List<Region> remainingRegions = Lists.newArrayList(); findLinearMatches(formatted, toBeFormatted, mappings, remainingRegions); for (Mapping m : mappings) toBeFormatted.migrateFrom(formatted, m); return toBeFormatted.toString(); }
protected void findLinearMatches(FormattedString formattedString, FormattedString toBeFormattedString, List<Mapping> mappings, List<Region> remainingRegions) { int i1 = 0; int i2 = 0; while (i1 < formattedString.length() && i2 < toBeFormattedString.length()) { int match = countOverlappingChars(formattedString, toBeFormattedString, i1, i2); if (match > 0) { mappings.add(new Mapping(formattedString, toBeFormattedString, i1, i2, match)); i1 += match; i2 += match; } if (i1 >= formattedString.length() || i2 >= toBeFormattedString.length()) return; int[] next = findNextOverlappingChar(formattedString, toBeFormattedString, i1, i2); if (next == null) { remainingRegions.add(new Region(i2, toBeFormattedString.length() - i2)); return; } remainingRegions.add(new Region(i2, next[1])); i1 += next[0]; i2 += next[1]; } }
public String migrate(String formattedString, String toBeFormattedString) { return migrate(formattedString, toBeFormattedString, WS); }