Skip to content
This repository has been archived by the owner on Sep 14, 2018. It is now read-only.

Commit

Permalink
Fix #923 (#1485)
Browse files Browse the repository at this point in the history
* Fix #923

* Add some tests to cover the flags parameter on sub/subn
  • Loading branch information
slozier authored and slide committed Oct 22, 2016
1 parent 48f1794 commit 1def2c3
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 71 deletions.
87 changes: 16 additions & 71 deletions Languages/IronPython/IronPython.Modules/re.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,9 @@ public static void PerformModuleReload(PythonContext/*!*/ context, PythonDiction

#region Public API Surface

public static RE_Pattern compile(CodeContext/*!*/ context, object pattern) {
public static RE_Pattern compile(CodeContext/*!*/ context, object pattern, [DefaultParameterValue(0)]int flags) {
try {
return GetPattern(context, pattern, 0, true);
} catch (ArgumentException e) {
throw PythonExceptions.CreateThrowable(error(context), e.Message);
}
}

public static RE_Pattern compile(CodeContext/*!*/ context, object pattern, object flags) {
try {
return GetPattern(context, pattern, PythonContext.GetContext(context).ConvertToInt32(flags), true);
return GetPattern(context, pattern, flags, true);
} catch (ArgumentException e) {
throw PythonExceptions.CreateThrowable(error(context), e.Message);
}
Expand Down Expand Up @@ -119,23 +111,15 @@ public static string escape(string text) {
return text;
}

public static List findall(CodeContext/*!*/ context, object pattern, string @string) {
return findall(context, pattern, @string, 0);
}

public static List findall(CodeContext/*!*/ context, object pattern, string @string, int flags) {
public static List findall(CodeContext/*!*/ context, object pattern, string @string, [DefaultParameterValue(0)]int flags) {
RE_Pattern pat = GetPattern(context, ValidatePattern(pattern), flags);
ValidateString(@string, "string");

MatchCollection mc = pat.FindAllWorker(context, @string, 0, @string.Length);
return FixFindAllMatch(pat, mc, null);
}

public static List findall(CodeContext/*!*/ context, object pattern, IList<byte> @string) {
return findall(context, pattern, @string, 0);
}

public static List findall(CodeContext/*!*/ context, object pattern, IList<byte> @string, int flags) {
public static List findall(CodeContext context, object pattern, IList<byte> @string, [DefaultParameterValue(0)]int flags) {
RE_Pattern pat = GetPattern(context, ValidatePattern (pattern), flags);
ValidateString (@string, "string");

Expand Down Expand Up @@ -190,58 +174,32 @@ private static List FixFindAllMatch(RE_Pattern pat, MatchCollection mc, Func<str
return List.FromArrayNoCopy(matches);
}

public static object finditer(CodeContext/*!*/ context, object pattern, object @string) {
return finditer(context, pattern, @string, 0);
}

public static object finditer(CodeContext/*!*/ context, object pattern, object @string, int flags) {
public static object finditer(CodeContext/*!*/ context, object pattern, object @string, [DefaultParameterValue(0)]int flags) {
RE_Pattern pat = GetPattern(context, ValidatePattern(pattern), flags);

string str = ValidateString(@string, "string");
return MatchIterator(pat.FindAllWorker(context, str, 0, str.Length), pat, str);
}

public static RE_Match match(CodeContext/*!*/ context, object pattern, object @string) {
return match(context, pattern, @string, 0);
}

public static RE_Match match(CodeContext/*!*/ context, object pattern, object @string, int flags) {
public static RE_Match match(CodeContext/*!*/ context, object pattern, object @string, [DefaultParameterValue(0)]int flags) {
return GetPattern(context, ValidatePattern(pattern), flags).match(ValidateString(@string, "string"));
}

public static RE_Match search(CodeContext/*!*/ context, object pattern, object @string) {
return search(context, pattern, @string, 0);
}

public static RE_Match search(CodeContext/*!*/ context, object pattern, object @string, int flags) {
public static RE_Match search(CodeContext/*!*/ context, object pattern, object @string, [DefaultParameterValue(0)]int flags) {
return GetPattern(context, ValidatePattern(pattern), flags).search(ValidateString(@string, "string"));
}

[return: SequenceTypeInfo(typeof(string))]
public static List split(CodeContext/*!*/ context, object pattern, object @string) {
return split(context, ValidatePattern(pattern), ValidateString(@string, "string"), 0);
}

[return: SequenceTypeInfo(typeof(string))]
public static List split(CodeContext/*!*/ context, object pattern, object @string, int maxsplit) {
return GetPattern(context, ValidatePattern(pattern), 0).split(ValidateString(@string, "string"),
maxsplit);
}

public static string sub(CodeContext/*!*/ context, object pattern, object repl, object @string) {
return sub(context, pattern, repl, @string, Int32.MaxValue);
}

public static string sub(CodeContext/*!*/ context, object pattern, object repl, object @string, int count) {
return GetPattern(context, ValidatePattern(pattern), 0).sub(context, repl, ValidateString(@string, "string"), count);
public static List split(CodeContext/*!*/ context, object pattern, object @string, [DefaultParameterValue(0)]int maxsplit, [DefaultParameterValue(0)]int flags) {
return GetPattern(context, ValidatePattern(pattern), flags).split(ValidateString(@string, "string"), maxsplit);
}

public static object subn(CodeContext/*!*/ context, object pattern, object repl, object @string) {
return subn(context, pattern, repl, @string, Int32.MaxValue);
public static string sub(CodeContext/*!*/ context, object pattern, object repl, object @string, [DefaultParameterValue(0)]int count, [DefaultParameterValue(0)]int flags) {
return GetPattern(context, ValidatePattern(pattern), flags).sub(context, repl, ValidateString(@string, "string"), count);
}

public static object subn(CodeContext/*!*/ context, object pattern, object repl, object @string, int count) {
return GetPattern(context, ValidatePattern(pattern), 0).subn(context, repl, ValidateString(@string, "string"), count);
public static object subn(CodeContext/*!*/ context, object pattern, object repl, object @string, [DefaultParameterValue(0)]int count, [DefaultParameterValue(0)]int flags) {
return GetPattern(context, ValidatePattern(pattern), flags).subn(context, repl, ValidateString(@string, "string"), count);

}

Expand Down Expand Up @@ -383,12 +341,7 @@ public object finditer(CodeContext/*!*/ context, object @string, int pos, int en
}

[return: SequenceTypeInfo(typeof(string))]
public List split(string @string) {
return split(@string, 0);
}

[return: SequenceTypeInfo(typeof(string))]
public List split(object @string, int maxsplit) {
public List split(object @string, [DefaultParameterValue(0)]int maxsplit) {
List result = new List();
// fast path for negative maxSplit ( == "make no splits")
if (maxsplit < 0) {
Expand Down Expand Up @@ -423,11 +376,7 @@ public List split(object @string, int maxsplit) {
return result;
}

public string sub(CodeContext/*!*/ context, object repl, object @string) {
return sub(context, repl, ValidateString(@string, "string"), Int32.MaxValue);
}

public string sub(CodeContext/*!*/ context, object repl, object @string, int count) {
public string sub(CodeContext/*!*/ context, object repl, object @string, [DefaultParameterValue(0)]int count) {
if (repl == null) throw PythonOps.TypeError("NoneType is not valid repl");
// if 'count' is omitted or 0, all occurrences are replaced
if (count == 0) count = Int32.MaxValue;
Expand Down Expand Up @@ -460,11 +409,7 @@ public string sub(CodeContext/*!*/ context, object repl, object @string, int cou
count);
}

public object subn(CodeContext/*!*/ context, object repl, string @string) {
return subn(context, repl, @string, Int32.MaxValue);
}

public object subn(CodeContext/*!*/ context, object repl, object @string, int count) {
public object subn(CodeContext/*!*/ context, object repl, object @string, [DefaultParameterValue(0)]int count) {
if (repl == null) throw PythonOps.TypeError("NoneType is not valid repl");
// if 'count' is omitted or 0, all occurrences are replaced
if (count == 0) count = Int32.MaxValue;
Expand Down
2 changes: 2 additions & 0 deletions Languages/IronPython/Tests/modules/io_related/re_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ def test_sanity_re():
AreEqual(re.sub("(abc){1}", "1", "abcd", count=0), "1d")
AreEqual(re.sub("(abc){1}", "1", "abcdabcd", 1), "1dabcd")
AreEqual(re.sub("(abc){1}", "1", "abcdabcd", 2), "1d1d")
AreEqual(re.sub("(abc){1}", "1", "ABCdabcd", 2, flags=re.I), "1d1d")

#subn
AreEqual(re.subn("(abc){1}", "9", "abcd"), ("9d", 1))
Expand All @@ -126,6 +127,7 @@ def test_sanity_re():
AreEqual(re.subn("(abc){1}", "1", "abcd", count=0), ("1d",1))
AreEqual(re.subn("(abc){1}", "1", "abcdabcd", 1), ("1dabcd",1))
AreEqual(re.subn("(abc){1}", "1", "abcdabcd", 2), ("1d1d",2))
AreEqual(re.subn("(abc){1}", "1", "ABCdabcd", 2, flags=re.I), ("1d1d",2))

#escape
AreEqual(re.escape("abc"), "abc")
Expand Down

0 comments on commit 1def2c3

Please sign in to comment.