Skip to content

Commit

Permalink
Update UTs
Browse files Browse the repository at this point in the history
  • Loading branch information
zsolt-kolbay-sonarsource committed Dec 11, 2023
1 parent c2a0b7c commit 14f5c7e
Show file tree
Hide file tree
Showing 12 changed files with 118 additions and 36 deletions.
Expand Up @@ -26,3 +26,35 @@ public static void DoSomething()
else if (myStruct.y) { } // FN
}
}

// https://github.com/SonarSource/sonar-dotnet/issues/7057
public class Repro_7057
{
private (string, int) SomeTuple() => ("hello", 1);
private string SomeString() => "hello";

public void WithTuple()
{
string text1 = null;
(text1, var (text2, _)) = (SomeString(), SomeTuple());
if (text1 == null) // Compliant
{
Console.WriteLine();
}
if (text2 == null) // Compliant
{
Console.WriteLine();
}

string text3 = null;
((text3, _), var (text4, _)) = ((null, 42), ("hello", 42));
if (text3 == null) // Noncompliant
{
Console.WriteLine();
}
if (text4 == null) // Noncompliant
{
Console.WriteLine(); // Secondary
}
}
}
Expand Up @@ -294,7 +294,7 @@ public void GoGoGo()
{
var tmp = 0;
var flag = true;
while (flag) // Noncompliant
while (flag) // Compliant
{
(flag, tmp) = (false, 5);
}
Expand Down Expand Up @@ -329,7 +329,7 @@ public void MutedNull()
{
var tmp = 0;
var flag = "x";
while (flag != null) // Noncompliant
while (flag != null) // Compliant
{
(flag, tmp) = (null, 5);
}
Expand Down
Expand Up @@ -133,8 +133,8 @@ public void ParenthesizedVariableDesignation_Nested(object arg)
public void NestedDeconstructionAssignment()
{
var (a, (b, _)) = (true, (true, true));
if (a) { } // FN
if (b) { } // FN
if (a) { } // Noncompliant
if (b) { } // Noncompliant
}

int UsingDeclaration_Null()
Expand Down
Expand Up @@ -121,11 +121,11 @@ public object InitWithTupleAssignment
{
var tmp = 0;
var flag = true;
while (flag) // Noncompliant
while (flag) // Compliant
{
(flag, tmp) = (false, 5);
}
o = value; // Secondary
o = value;
}
}
}
Expand Down
Expand Up @@ -3125,7 +3125,7 @@ public void Go()

(memoryStream, str) = GetData();

if (memoryStream != null) // Noncompliant FP: memoryStream was reassigned as a tuple
if (memoryStream != null) // Compliant: memoryStream was reassigned as a tuple
{
// some code
}
Expand All @@ -3142,27 +3142,78 @@ public class Repro_7057

public void WithTuple()
{
string current = null;
string last;
do
string text1 = null;
(text1, _) = SomeTuple();
if (text1 == null) // Compliant
{
Console.WriteLine();
}

string text2 = "";
(text2, _) = (null, 42);
if (text2 == null) // Noncompliant
{
Console.WriteLine();
}

string text3 = null;
((text3, _), _) = (SomeTuple(), 42);
if (text3 == null) // Compliant
{
Console.WriteLine();
}

var (text4, _) = SomeTuple();
if (text4 == null) // Compliant
{
Console.WriteLine();
}

var (text5, _) = (null as string, 42);
if (text5 == null) // Noncompliant
{
Console.WriteLine();
}

string text6 = null;
(_, (text6, _)) = (42, SomeTuple());
if (text6 == null) // Compliant
{
Console.WriteLine();
}

string text7 = "";
(_, (text7, _)) = (SomeTuple(), (null, 42));
if (text7 == null) // Noncompliant
{
Console.WriteLine();
}

string text8, text9, text10;
text8 = text9 = text10 = SomeString();
(text8, (text9, text10)) = ("", ("", ""));
if (text8 == null // Noncompliant
|| text9 == null // Noncompliant
|| text10 == null) // Noncompliant
{
last = current;
(current, _) = SomeTuple();
Console.WriteLine(); // Secondary
}

var tuple = ("hello", 42);
if (tuple.Item1 == null) // FN
{
Console.WriteLine();
}
while (last == null); // Noncompliant FP
}

public void WithString()
{
string current = null;
string last;

do
current = SomeString();
if (current == null) // Compliant
{
last = current;
current = SomeString();
Console.WriteLine();
}
while (last == null);
}
}

Expand Down
Expand Up @@ -8,12 +8,12 @@ public void Method()
List<int> list;

(list, var a) = (new List<int>(), 42);
list.Clear(); // FN
list.Clear(); // Noncompliant
list.Add(42);
list.Clear();

(var list2, var b) = (new List<int>(), 42);
list2.Clear(); // FN
list2.Clear(); // Noncompliant
list2.Add(42);
list2.Clear();

Expand Down
Expand Up @@ -7,7 +7,7 @@ public void Destructuring()
int? nullable;

(nullable, _) = (null, 42);
var v = nullable.Value; // FN
var v = nullable.Value; // Noncompliant

nullable = null;
v = nullable.Value; // Noncompliant
Expand Down
Expand Up @@ -148,21 +148,21 @@ class AssignmentAndDeconstruction
void TypeInference()
{
(int? discard, int? b) = (null, null);
_ = b.Value; // FN: b is empty
_ = b.Value; // Noncompliant
}

void FirstLevel()
{
var (b, _) = (null as bool?, null as bool?);
_ = b.Value; // FN: b is empty
_ = b.Value; // Noncompliant
}

void SecondLevel()
{
(int? i1, (int? i2, int? i3)) = (42, (42, null));
_ = i1.Value; // Compliant
_ = i2.Value; // Compliant
_ = i3.Value; // FN
_ = i3.Value; // Noncompliant
}

void ThirdLevel()
Expand All @@ -171,23 +171,23 @@ void ThirdLevel()
_ = i1.Value; // Compliant
_ = i2.Value; // Compliant
_ = i3.Value; // Compliant
_ = i4.Value; // FN
_ = i4.Value; // Noncompliant
_ = i5.Value; // Compliant
}

void WithDiscard()
{
(_, (int? i1, (int?, int?) _, int? i2)) = (42, (42, (42, null), null));
_ = i1.Value; // Compliant
_ = i2.Value; // FN
_ = i2.Value; // Noncompliant
}

void TwoWaySwapping()
{
bool? b1 = null;
bool? b2 = true;
(b1, b2) = (b2, b1);
_ = b1.Value; // Noncompliant, FP: after swapping is non-empty
_ = b1.Value; // Compliant: after swapping is non-empty
_ = b2.Value; // FN: after swapping is empty
}

Expand All @@ -197,9 +197,9 @@ void ThreeWaySwapping()
bool? b2 = true;
bool? b3 = null;
(b1, b2, b3) = (b2, b3, b2);
_ = b1.Value; // Noncompliant, FP: after swapping is non-empty
_ = b1.Value; // Compliant: after swapping is non-empty
_ = b2.Value; // FN: after swapping is empty
_ = b3.Value; // Noncompliant, FP: after swapping is non-empty
_ = b3.Value; // Compliant: after swapping is non-empty
}

void CustomDeconstruction()
Expand Down
Expand Up @@ -5,6 +5,6 @@ public class Sample
public void Examples(byte[] passwordBytes)
{
(var shortSalt, int a) = (new byte[15], 42);
PasswordDeriveBytes aes = new PasswordDeriveBytes(passwordBytes, shortSalt); // FN
PasswordDeriveBytes aes = new PasswordDeriveBytes(passwordBytes, shortSalt); // Noncompliant
}
}
Expand Up @@ -9,6 +9,6 @@ public void Examples()
AesCng aes = new AesCng();
aes.CreateEncryptor();
(var rgb, int a) = (new byte[16], 42);
aes.CreateEncryptor(aes.Key, rgb); // FN
aes.CreateEncryptor(aes.Key, rgb); // Noncompliant
}
}
Expand Up @@ -8,16 +8,15 @@ public class Sample
public void Examples()
{
StringBuilder sb = new();

(sb, int a) = (null, 42);
sb.ToString(); // FN
sb.ToString(); // Noncompliant
}

public void Unassigned()
{
StringBuilder isNull, hasValue;
(isNull, hasValue) = (null, new StringBuilder());
isNull.ToString(); // FN
isNull.ToString(); // Noncompliant
hasValue.ToString();
}
}
Expand Up @@ -250,7 +250,7 @@ public static void LoopOfTuples(List<IDisposable> disposables, List<(int I, IDis
disposable.Dispose(); // Compliant

foreach (var (_, disposable) in tuples)
disposable.Dispose(); // Noncompliant FP
disposable.Dispose(); // Compliant
}
}

Expand Down

0 comments on commit 14f5c7e

Please sign in to comment.