10 changed files with 254 additions and 439 deletions
@ -1,147 +0,0 @@ |
|||||||
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
|
||||||
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
||||||
//
|
|
||||||
//using System;
|
|
||||||
//using System.Collections.Generic;
|
|
||||||
//using System.Linq;
|
|
||||||
//using ICSharpCode.PackageManagement.EnvDTE;
|
|
||||||
//using NUnit.Framework;
|
|
||||||
//using PackageManagement.Tests.Helpers;
|
|
||||||
//
|
|
||||||
//namespace PackageManagement.Tests.EnvDTE
|
|
||||||
//{
|
|
||||||
// [TestFixture]
|
|
||||||
// public class CodeElementsInNamespaceTests
|
|
||||||
// {
|
|
||||||
// CodeElementsInNamespace codeElements;
|
|
||||||
// ProjectContentHelper helper;
|
|
||||||
//
|
|
||||||
// [SetUp]
|
|
||||||
// public void Init()
|
|
||||||
// {
|
|
||||||
// helper = new ProjectContentHelper();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// void CreateCodeElements(string namespaceName)
|
|
||||||
// {
|
|
||||||
// codeElements = new CodeElementsInNamespace(helper.ProjectContent, namespaceName);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void Count_NoItemsInNamespace_ReturnsZero()
|
|
||||||
// {
|
|
||||||
// helper.NoCompletionItemsInNamespace("Test");
|
|
||||||
// CreateCodeElements("Test");
|
|
||||||
//
|
|
||||||
// int count = codeElements.Count;
|
|
||||||
//
|
|
||||||
// Assert.AreEqual(0, count);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void GetEnumerator_NoItemsInNamespace_ReturnsNoItems()
|
|
||||||
// {
|
|
||||||
// helper.NoCompletionItemsInNamespace("Test");
|
|
||||||
// CreateCodeElements("Test");
|
|
||||||
//
|
|
||||||
// List<CodeElement> codeElementsList = codeElements.ToList();
|
|
||||||
//
|
|
||||||
// Assert.AreEqual(0, codeElementsList.Count);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void GetEnumerator_OneNamespaceCompletionEntryInNamespace_ReturnsOneCodeNamespace()
|
|
||||||
// {
|
|
||||||
// helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child");
|
|
||||||
// CreateCodeElements("Parent");
|
|
||||||
//
|
|
||||||
// CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault();
|
|
||||||
//
|
|
||||||
// Assert.AreEqual(1, codeElements.Count);
|
|
||||||
// Assert.AreEqual("Child", codeNamespace.Name);
|
|
||||||
// Assert.AreEqual("Parent.Child", codeNamespace.FullName);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void GetEnumerator_OneClassCompletionEntryInNamespace_ReturnsOneCodeClass()
|
|
||||||
// {
|
|
||||||
// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass");
|
|
||||||
// CreateCodeElements("Test");
|
|
||||||
//
|
|
||||||
// CodeClass2 codeClass = codeElements.ToList().FirstOrDefault() as CodeClass2;
|
|
||||||
//
|
|
||||||
// Assert.AreEqual(1, codeElements.Count);
|
|
||||||
// Assert.AreEqual("MyClass", codeClass.Name);
|
|
||||||
// Assert.AreEqual("Test.MyClass", codeClass.FullName);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void GetEnumerator_UnknownCompletionEntryInNamespace_ReturnsNoItems()
|
|
||||||
// {
|
|
||||||
// helper.AddUnknownCompletionEntryTypeToNamespace("Test");
|
|
||||||
// CreateCodeElements("Test");
|
|
||||||
//
|
|
||||||
// List<CodeElement> codeElementsList = codeElements.ToList();
|
|
||||||
//
|
|
||||||
// Assert.AreEqual(0, codeElementsList.Count);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void GetEnumerator_EmptyNamespaceEntry_ReturnsNoItems()
|
|
||||||
// {
|
|
||||||
// helper.AddNamespaceCompletionEntryInNamespace(String.Empty, String.Empty);
|
|
||||||
// CreateCodeElements(String.Empty);
|
|
||||||
//
|
|
||||||
// List<CodeElement> codeElementsList = codeElements.ToList();
|
|
||||||
//
|
|
||||||
// Assert.AreEqual(0, codeElementsList.Count);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void GetEnumerator_ParentChildAndGrandChildNamespaces_ReturnsOneCodeNamespaceWhichHasGrandChildNamespace()
|
|
||||||
// {
|
|
||||||
// helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child");
|
|
||||||
// helper.AddNamespaceCompletionEntryInNamespace("Parent.Child", "GrandChild");
|
|
||||||
// helper.NoCompletionItemsInNamespace("Parent.Child.GrandChild");
|
|
||||||
// CreateCodeElements("Parent");
|
|
||||||
//
|
|
||||||
// CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault();
|
|
||||||
// CodeNamespace grandChildNamespace = codeNamespace.Members.FirstCodeNamespaceOrDefault();
|
|
||||||
//
|
|
||||||
// Assert.AreEqual("GrandChild", grandChildNamespace.Name);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void Item_OneClassCompletionEntryAndFirstItemSelected_ReturnsOneCodeClass()
|
|
||||||
// {
|
|
||||||
// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass");
|
|
||||||
// CreateCodeElements("Test");
|
|
||||||
//
|
|
||||||
// CodeClass2 codeClass = codeElements.Item(1) as CodeClass2;
|
|
||||||
//
|
|
||||||
// Assert.AreEqual("Test.MyClass", codeClass.FullName);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void Item_OneClassCompletionEntryAndItemSelectedByName_ReturnsOneCodeClass()
|
|
||||||
// {
|
|
||||||
// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass");
|
|
||||||
// CreateCodeElements("Test");
|
|
||||||
//
|
|
||||||
// CodeClass2 codeClass = codeElements.Item("MyClass") as CodeClass2;
|
|
||||||
//
|
|
||||||
// Assert.AreEqual("Test.MyClass", codeClass.FullName);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// [Test]
|
|
||||||
// public void Item_OneInterfaceCompletionEntryAndItemSelectedByName_ReturnsOneCodeInterface()
|
|
||||||
// {
|
|
||||||
// helper.AddInterfaceToProjectContentAndCompletionEntries("Test", "Test.IClass");
|
|
||||||
// CreateCodeElements("Test");
|
|
||||||
//
|
|
||||||
// CodeInterface codeInterface = codeElements.Item("IClass") as CodeInterface;
|
|
||||||
//
|
|
||||||
// Assert.AreEqual("Test.IClass", codeInterface.FullName);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
@ -1,164 +1,195 @@ |
|||||||
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
//// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
//
|
|
||||||
//using System;
|
using System; |
||||||
//using ICSharpCode.PackageManagement.EnvDTE;
|
using ICSharpCode.PackageManagement.EnvDTE; |
||||||
//using ICSharpCode.SharpDevelop.Dom;
|
using NUnit.Framework; |
||||||
//using NUnit.Framework;
|
using PackageManagement.Tests.Helpers; |
||||||
//using PackageManagement.Tests.Helpers;
|
|
||||||
//
|
namespace PackageManagement.Tests.EnvDTE |
||||||
//namespace PackageManagement.Tests.EnvDTE
|
{ |
||||||
//{
|
[TestFixture] |
||||||
// [TestFixture]
|
public class CodeNamespaceTests : CodeModelTestBase |
||||||
// public class CodeNamespaceTests
|
{ |
||||||
// {
|
CodeNamespace codeNamespace; |
||||||
// CodeNamespace codeNamespace;
|
|
||||||
// ProjectContentHelper helper;
|
void CreateCodeNamespace(string code, string rootNamespace) |
||||||
//
|
{ |
||||||
// void CreateCodeNamespace(string namespaceName)
|
CreateCodeModel(); |
||||||
// {
|
AddCodeFile("class.cs", code); |
||||||
// codeNamespace = new CodeNamespace(helper.ProjectContent, namespaceName);
|
|
||||||
// }
|
codeNamespace = codeModel |
||||||
//
|
.CodeElements |
||||||
// void CreateProjectContent()
|
.FindFirstCodeNamespaceOrDefault(n => n.Name == rootNamespace); |
||||||
// {
|
} |
||||||
// helper = new ProjectContentHelper();
|
|
||||||
// }
|
[Test] |
||||||
//
|
public void Members_NamespaceHasOneClass_ReturnsOneClass() |
||||||
// void AddClassToProjectContent(string namespaceName, string className)
|
{ |
||||||
// {
|
string code = |
||||||
// helper.AddClassToProjectContentAndCompletionEntries(namespaceName, className);
|
"namespace Tests {\r\n" + |
||||||
// }
|
" public class MyClass {}\r\n" + |
||||||
//
|
"}"; |
||||||
// void AddUnknownCompletionEntryToNamespace(string namespaceName)
|
CreateCodeNamespace(code, "Tests"); |
||||||
// {
|
|
||||||
// helper.AddUnknownCompletionEntryTypeToNamespace(namespaceName);
|
global::EnvDTE.CodeElements members = codeNamespace.Members; |
||||||
// }
|
CodeClass2 codeClass = members.FirstCodeClass2OrDefault(); |
||||||
//
|
|
||||||
// [Test]
|
Assert.AreEqual(1, members.Count); |
||||||
// public void Members_NamespaceHasOneClass_ReturnsOneClass()
|
Assert.AreEqual("Tests.MyClass", codeClass.FullName); |
||||||
// {
|
} |
||||||
// CreateProjectContent();
|
|
||||||
// AddClassToProjectContent("Tests", "Tests.MyClass");
|
[Test] |
||||||
// CreateCodeNamespace("Tests");
|
public void Members_NamespaceHasOneChildNamespace_ReturnsOneChildNamespace() |
||||||
//
|
{ |
||||||
// global::EnvDTE.CodeElements members = codeNamespace.Members;
|
string code = "namespace First.Second {}"; |
||||||
// CodeClass2 codeClass = members.FirstCodeClass2OrDefault();
|
CreateCodeNamespace(code, "First"); |
||||||
//
|
|
||||||
// Assert.AreEqual(1, members.Count);
|
global::EnvDTE.CodeElements members = codeNamespace.Members; |
||||||
// Assert.AreEqual("Tests.MyClass", codeClass.FullName);
|
CodeNamespace childNamespace = members.FirstCodeNamespaceOrDefault(); |
||||||
// }
|
|
||||||
//
|
Assert.AreEqual("First", codeNamespace.Name); |
||||||
// [Test]
|
Assert.AreEqual(1, members.Count); |
||||||
// public void Members_NamespaceHasOneChildNamespace_ReturnsOneChildNamespace()
|
Assert.AreEqual("Second", childNamespace.Name); |
||||||
// {
|
Assert.AreEqual("First.Second", childNamespace.FullName); |
||||||
// CreateProjectContent();
|
} |
||||||
// helper.AddNamespaceCompletionEntryInNamespace("First", "Second");
|
|
||||||
// CreateCodeNamespace("First");
|
[Test] |
||||||
//
|
public void InfoLocation_NamespaceHasNoClasses_ReturnsExternal() |
||||||
// global::EnvDTE.CodeElements members = codeNamespace.Members;
|
{ |
||||||
// CodeNamespace childNamespace = members.FirstCodeNamespaceOrDefault();
|
string code = "namespace Test {}"; |
||||||
//
|
CreateCodeNamespace(code, "Test"); |
||||||
// Assert.AreEqual("First", codeNamespace.Name);
|
|
||||||
// Assert.AreEqual(1, members.Count);
|
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeNamespace.InfoLocation); |
||||||
// Assert.AreEqual("Second", childNamespace.Name);
|
} |
||||||
// Assert.AreEqual("First.Second", childNamespace.FullName);
|
|
||||||
// }
|
[Test] |
||||||
//
|
public void Members_NamespaceHasOneChildNamespaceWithThreeNamespaceParts_ReturnsOneChildNamespaceWhichHasOneChildNamespace() |
||||||
// [Test]
|
{ |
||||||
// public void InfoLocation_NamespaceHasNoClasses_ReturnsExternal()
|
string code = "namespace First.Second.Third {}"; |
||||||
// {
|
CreateCodeNamespace(code, "First"); |
||||||
// CreateProjectContent();
|
|
||||||
// CreateCodeNamespace("Test");
|
global::EnvDTE.CodeElements members = codeNamespace.Members; |
||||||
//
|
CodeNamespace secondNamespace = members.FirstCodeNamespaceOrDefault(); |
||||||
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeNamespace.InfoLocation);
|
CodeNamespace thirdNamespace = secondNamespace.Members.FirstCodeNamespaceOrDefault(); |
||||||
// }
|
|
||||||
//
|
Assert.AreEqual("First", codeNamespace.Name); |
||||||
// [Test]
|
Assert.AreEqual(1, members.Count); |
||||||
// public void Members_NamespaceHasOneChildNamespaceWithThreeNamespaceParts_ReturnsOneChildNamespaceWhichHasOneChildNamespace()
|
Assert.AreEqual("Second", secondNamespace.Name); |
||||||
// {
|
Assert.AreEqual("First.Second", secondNamespace.FullName); |
||||||
// CreateProjectContent();
|
Assert.AreEqual(1, secondNamespace.Members.Count); |
||||||
// helper.AddNamespaceCompletionEntryInNamespace("First", "Second");
|
Assert.AreEqual("First.Second.Third", thirdNamespace.FullName); |
||||||
// helper.AddNamespaceCompletionEntryInNamespace("First.Second", "Third");
|
Assert.AreEqual(0, thirdNamespace.Members.Count); |
||||||
// helper.NoCompletionItemsInNamespace("First.Second.Third");
|
} |
||||||
// CreateCodeNamespace("First");
|
|
||||||
//
|
[Test] |
||||||
// global::EnvDTE.CodeElements members = codeNamespace.Members;
|
public void Members_ProjectHasTwoNamespacesWithCommonFirstAndSecondPartOfThreePartNamespace_ReturnsOneChildNamespaceWhichHasOneChildNamespace() |
||||||
// CodeNamespace secondNamespace = members.FirstCodeNamespaceOrDefault();
|
{ |
||||||
// CodeNamespace thirdNamespace = secondNamespace.Members.FirstCodeNamespaceOrDefault();
|
string code = |
||||||
//
|
"namespace First.Second {\r\n" + |
||||||
// Assert.AreEqual("First", codeNamespace.Name);
|
" namespace Third {}\r\n" + |
||||||
// Assert.AreEqual(1, members.Count);
|
" namespace Different {}\r\n" + |
||||||
// Assert.AreEqual("Second", secondNamespace.Name);
|
"}"; |
||||||
// Assert.AreEqual("First.Second", secondNamespace.FullName);
|
CreateCodeNamespace(code, "First"); |
||||||
// Assert.AreEqual(1, secondNamespace.Members.Count);
|
|
||||||
// Assert.AreEqual("First.Second.Third", thirdNamespace.FullName);
|
global::EnvDTE.CodeElements members = codeNamespace.Members; |
||||||
// Assert.AreEqual(0, thirdNamespace.Members.Count);
|
CodeNamespace secondNamespace = members.FirstOrDefault() as CodeNamespace; |
||||||
// }
|
|
||||||
//
|
Assert.AreEqual("First", codeNamespace.Name); |
||||||
// [Test]
|
Assert.AreEqual(1, members.Count); |
||||||
// public void Members_ProjectHasTwoNamespacesWithCommonFirstAndSecondPartOfThreePartNamespace_ReturnsOneChildNamespaceWhichHasOneChildNamespace()
|
Assert.AreEqual("Second", secondNamespace.Name); |
||||||
// {
|
Assert.AreEqual("First.Second", secondNamespace.FullName); |
||||||
// CreateProjectContent();
|
Assert.AreEqual(2, secondNamespace.Members.Count); |
||||||
// helper.AddNamespaceCompletionEntryInNamespace("First", "Second");
|
} |
||||||
// helper.AddNamespaceCompletionEntriesInNamespace("First.Second", "Third", "Different");
|
|
||||||
// CreateCodeNamespace("First");
|
[Test] |
||||||
//
|
public void Language_CSharpProject_ReturnsCSharpModelLanguage() |
||||||
// global::EnvDTE.CodeElements members = codeNamespace.Members;
|
{ |
||||||
// CodeNamespace secondNamespace = members.FirstOrDefault() as CodeNamespace;
|
string code = "namespace Test {}"; |
||||||
//
|
CreateCodeNamespace(code, "Test"); |
||||||
// Assert.AreEqual("First", codeNamespace.Name);
|
|
||||||
// Assert.AreEqual(1, members.Count);
|
string language = codeNamespace.Language; |
||||||
// Assert.AreEqual("Second", secondNamespace.Name);
|
|
||||||
// Assert.AreEqual("First.Second", secondNamespace.FullName);
|
Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language); |
||||||
// Assert.AreEqual(2, secondNamespace.Members.Count);
|
} |
||||||
// }
|
|
||||||
//
|
[Test] |
||||||
// [Test]
|
[Ignore("VB.NET not supported")] |
||||||
// public void Members_NamespaceHasUnknownNamespaceEntryType_ReturnsNoItems()
|
public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage() |
||||||
// {
|
{ |
||||||
// CreateProjectContent();
|
string code = |
||||||
// AddUnknownCompletionEntryToNamespace("Tests");
|
"Namespace Test\r\n" + |
||||||
// CreateCodeNamespace("Tests");
|
"End Namespace"; |
||||||
//
|
CreateCodeNamespace(code, "Test"); |
||||||
// global::EnvDTE.CodeElements members = codeNamespace.Members;
|
|
||||||
//
|
string language = codeNamespace.Language; |
||||||
// Assert.AreEqual(0, members.Count);
|
|
||||||
// }
|
Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language); |
||||||
//
|
} |
||||||
// [Test]
|
|
||||||
// public void Language_CSharpProject_ReturnsCSharpModelLanguage()
|
[Test] |
||||||
// {
|
public void Kind_NamespaceHasNoClasses_ReturnsNamespace() |
||||||
// CreateProjectContent();
|
{ |
||||||
// helper.ProjectContentIsForCSharpProject();
|
string code = "namespace Test {}"; |
||||||
// CreateCodeNamespace(String.Empty);
|
CreateCodeNamespace(code, "Test"); |
||||||
//
|
|
||||||
// string language = codeNamespace.Language;
|
global::EnvDTE.vsCMElement kind = codeNamespace.Kind; |
||||||
//
|
|
||||||
// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language);
|
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementNamespace, kind); |
||||||
// }
|
} |
||||||
//
|
|
||||||
// [Test]
|
[Test] |
||||||
// public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage()
|
public void Members_ParentChildAndGrandChildNamespaces_ReturnsOneCodeNamespaceWhichHasGrandChildNamespace() |
||||||
// {
|
{ |
||||||
// CreateProjectContent();
|
string code = "namespace Parent.Child.GrandChild {}"; |
||||||
// helper.ProjectContentIsForVisualBasicProject();
|
CreateCodeNamespace(code, "Parent"); |
||||||
// CreateCodeNamespace(String.Empty);
|
|
||||||
//
|
CodeNamespace childNamespace = codeNamespace.Members.FirstCodeNamespaceOrDefault(); |
||||||
// string language = codeNamespace.Language;
|
CodeNamespace grandChildNamespace = childNamespace.Members.FirstCodeNamespaceOrDefault(); |
||||||
//
|
|
||||||
// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language);
|
Assert.AreEqual("GrandChild", grandChildNamespace.Name); |
||||||
// }
|
} |
||||||
//
|
|
||||||
// [Test]
|
[Test] |
||||||
// public void Kind_EmptyStringNamespace_ReturnsNamespace()
|
public void Members_OneInterfaceCompletionEntryAndItemSelectedByName_ReturnsOneCodeInterface() |
||||||
// {
|
{ |
||||||
// CreateProjectContent();
|
string code = |
||||||
// CreateCodeNamespace(String.Empty);
|
"namespace Test {\r\n" + |
||||||
//
|
" public interface IClass {}\r\n" + |
||||||
// global::EnvDTE.vsCMElement kind = codeNamespace.Kind;
|
"}"; |
||||||
//
|
CreateCodeNamespace(code, "Test"); |
||||||
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementNamespace, kind);
|
|
||||||
// }
|
var codeInterface = codeNamespace.Members.Item("IClass") as CodeInterface; |
||||||
// }
|
|
||||||
//}
|
Assert.AreEqual("Test.IClass", codeInterface.FullName); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void Members_OneClassCompletionEntryAndFirstItemSelected_ReturnsOneCodeClass() |
||||||
|
{ |
||||||
|
string code = |
||||||
|
"namespace Test {\r\n" + |
||||||
|
" public class MyClass {}\r\n" + |
||||||
|
"}"; |
||||||
|
CreateCodeNamespace(code, "Test"); |
||||||
|
|
||||||
|
var codeClass = codeNamespace.Members.Item(1) as CodeClass2; |
||||||
|
|
||||||
|
Assert.AreEqual("Test.MyClass", codeClass.FullName); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void Members_OneClassCompletionEntryAndItemSelectedByName_ReturnsOneCodeClass() |
||||||
|
{ |
||||||
|
string code = |
||||||
|
"namespace Test {\r\n" + |
||||||
|
" public class MyClass {}\r\n" + |
||||||
|
"}"; |
||||||
|
CreateCodeNamespace(code, "Test"); |
||||||
|
|
||||||
|
var codeClass = codeNamespace.Members.Item("MyClass") as CodeClass2; |
||||||
|
|
||||||
|
Assert.AreEqual("Test.MyClass", codeClass.FullName); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|||||||
Loading…
Reference in new issue