From 74c82f8590689db15f567c87b17fd8c434816380 Mon Sep 17 00:00:00 2001 From: Devin Torres Date: Mon, 8 Jul 2013 17:16:05 -0500 Subject: [PATCH] String.split("") should be [""], %w() should be [] --- lib/elixir/lib/kernel.ex | 2 ++ lib/elixir/lib/string.ex | 2 ++ lib/elixir/priv/unicode.ex | 2 +- lib/elixir/test/elixir/kernel/sigils_test.exs | 1 + lib/elixir/test/elixir/regex_test.exs | 1 + lib/elixir/test/elixir/string_test.exs | 3 +++ 6 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/elixir/lib/kernel.ex b/lib/elixir/lib/kernel.ex index 2be7f7d6f6b..547fcaa79d8 100644 --- a/lib/elixir/lib/kernel.ex +++ b/lib/elixir/lib/kernel.ex @@ -3757,6 +3757,8 @@ defmodule Kernel do end end + defp split_words("", _modifiers), do: [] + defp split_words(string, modifiers) do mod = case modifiers do [] -> ?b diff --git a/lib/elixir/lib/string.ex b/lib/elixir/lib/string.ex index c0227f5ddcb..8e17473e9d8 100644 --- a/lib/elixir/lib/string.ex +++ b/lib/elixir/lib/string.ex @@ -246,6 +246,8 @@ defmodule String do @spec split(t, t | [t] | Regex.t, Keyword.t) :: [t] def split(binary, pattern, options // []) + def split("", _pattern, _options), do: [""] + def split(binary, pattern, options) when is_regex(pattern) do Regex.split(pattern, binary, global: options[:global]) end diff --git a/lib/elixir/priv/unicode.ex b/lib/elixir/priv/unicode.ex index e96bce48a67..de622a1599f 100644 --- a/lib/elixir/priv/unicode.ex +++ b/lib/elixir/priv/unicode.ex @@ -137,7 +137,7 @@ defmodule String.Unicode do # Split - def split(""), do: "" + def split(""), do: [""] def split(string) when is_binary(string) do :lists.reverse do_split(string, "", []) diff --git a/lib/elixir/test/elixir/kernel/sigils_test.exs b/lib/elixir/test/elixir/kernel/sigils_test.exs index 3d00f5ef059..c388abdcf6d 100644 --- a/lib/elixir/test/elixir/kernel/sigils_test.exs +++ b/lib/elixir/test/elixir/kernel/sigils_test.exs @@ -50,6 +50,7 @@ defmodule Kernel.SigilsTest do end test :sigil_w do + assert %w() == [] assert %w(foo bar baz) == ["foo", "bar", "baz"] assert %w(foo #{:bar} baz) == ["foo", "bar", "baz"] diff --git a/lib/elixir/test/elixir/regex_test.exs b/lib/elixir/test/elixir/regex_test.exs index 829f27320be..ed44c681919 100644 --- a/lib/elixir/test/elixir/regex_test.exs +++ b/lib/elixir/test/elixir/regex_test.exs @@ -101,6 +101,7 @@ defmodule Regex.BinaryTest do end test :split do + assert Regex.split(%r",", "") == [""] assert Regex.split(%r" ", "foo bar baz") == ["foo", "bar", "baz"] assert Regex.split(%r" ", "foo bar baz", parts: 2) == ["foo", "bar baz"] assert Regex.split(%r"\s", "foobar") == ["foobar"] diff --git a/lib/elixir/test/elixir/string_test.exs b/lib/elixir/test/elixir/string_test.exs index 2d2a6b2f176..c99ec9e47b4 100644 --- a/lib/elixir/test/elixir/string_test.exs +++ b/lib/elixir/test/elixir/string_test.exs @@ -16,6 +16,7 @@ defmodule StringTest do end test :split do + assert String.split("") == [""] assert String.split("foo bar") == ["foo", "bar"] assert String.split(" foo bar") == ["foo", "bar"] assert String.split("foo bar ") == ["foo", "bar"] @@ -24,6 +25,7 @@ defmodule StringTest do assert String.split("foo" <> <<31>> <> "bar") == ["foo", "bar"] assert String.split("foo" <> <<194, 133>> <> "bar") == ["foo", "bar"] + assert String.split("", ",") == [""] assert String.split("a,b,c", ",") == ["a", "b", "c"] assert String.split("a,b", ".") == ["a,b"] assert String.split("1,2 3,4", [" ", ","]) == ["1", "2", "3", "4"] @@ -33,6 +35,7 @@ defmodule StringTest do end test :split_with_regex do + assert String.split("", %r{,}) == [""] assert String.split("a,b", %r{,}) == ["a", "b"] assert String.split("a,b,c", %r{,}) == ["a", "b", "c"] assert String.split("a,b,c", %r{,}, global: false) == ["a", "b,c"]