blob: a50aa0cd3263b708b1c8e2be051f9d06b4fcc686 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace Apache.Ignite.Tests.Table;
using System;
using Internal.Table;
using NUnit.Framework;
/// <summary>
/// Tests for <see cref="IgniteNameUtils"/>.
/// </summary>
public class IgniteNameUtilsTests
{
[TestCaseSource(nameof(ValidUnquotedIdentifiers))]
[TestCaseSource(nameof(ValidQuotedIdentifiers))]
public void TestValidIdentifiers(string source, string expected)
{
string parsed = IgniteNameUtils.ParseIdentifier(source);
Assert.AreEqual(expected, parsed);
Assert.AreEqual(parsed, IgniteNameUtils.ParseIdentifier(IgniteNameUtils.QuoteIfNeeded(parsed)));
}
[TestCaseSource(nameof(MalformedIdentifiers))]
public void TestMalformedIdentifiers(string source)
{
Assert.Throws<ArgumentException>(() => IgniteNameUtils.ParseIdentifier(source));
}
[TestCaseSource(nameof(QuoteIfNeeded))]
public void TestQuoteIfNeeded(string source, string expected)
{
string quoted = IgniteNameUtils.QuoteIfNeeded(source);
Assert.AreEqual(expected, quoted);
Assert.AreEqual(expected, IgniteNameUtils.QuoteIfNeeded(IgniteNameUtils.ParseIdentifier(quoted)));
}
private static TestCaseData[] QuoteIfNeeded() =>
[
new("foo", "\"foo\""),
new("fOo", "\"fOo\""),
new("FOO", "FOO"),
new("1o0", "\"1o0\""),
new("@#$", "\"@#$\""),
new("f16", "\"f16\""),
new("F16", "F16"),
new("Ff16", "\"Ff16\""),
new("FF16", "FF16"),
new(" ", "\" \""),
new(" F", "\" F\""),
new(" ,", "\" ,\""),
new("😅", "\"😅\""),
new("\"foo\"", "\"\"\"foo\"\"\""),
new("\"fOo\"", "\"\"\"fOo\"\"\""),
new("\"f.f\"", "\"\"\"f.f\"\"\""),
new("foo\"bar\"", "\"foo\"\"bar\"\"\""),
new("foo\"bar", "\"foo\"\"bar\""),
];
private static string[] MalformedIdentifiers() =>
[
" ", "foo-1", "f.f", "f f", "f\"f", "f\"\"f", "\"foo", "\"fo\"o\"", "1o0", "@#$", "😅", "f😅", "$foo", "foo$"
];
private static TestCaseData[] ValidUnquotedIdentifiers() =>
[
new("foo", "FOO"),
new("fOo", "FOO"),
new("FOO", "FOO"),
new("fo_o", "FO_O"),
new("_foo", "_FOO"),
];
private static TestCaseData[] ValidQuotedIdentifiers() =>
[
new("\"FOO\"", "FOO"),
new("\"foo\"", "foo"),
new("\"fOo\"", "fOo"),
new("\"$fOo\"", "$fOo"),
new("\"f.f\"", "f.f"),
new("\"f\"\"f\"", "f\"f"),
new("\" \"", " "),
new("\" \"", " "),
new("\",\"", ","),
new("\"😅\"", "😅"),
new("\"f😅\"", "f😅"),
];
}