static void Main()
    {
        Console.WriteLine("This program parses an URL address given in the format:");
        Console.WriteLine("[protocol]://[server]/[resource]");
        Console.Write("\nPlease enter URL address to be parsed: ");
        string     input          = Console.ReadLine();
        URLAddress currentAddress = ParseAddress(input);

        Console.WriteLine("\n[protocol] = \"{0}\"", currentAddress.protocol);
        Console.WriteLine("[server] = \"{0}\"", currentAddress.server);
        Console.WriteLine("[resource] = \"{0}\"\n", currentAddress.resource);
    }
 private static URLAddress ParseAddress(string input)
 {
     URLAddress url = new URLAddress();
     string[] parsedAddress = input.Split(':');
     url.protocol = parsedAddress[0];
     parsedAddress[1] = parsedAddress[1].Substring(2);
     int separator = parsedAddress[1].IndexOf('/');
     if (separator != -1)
     {
         url.server = parsedAddress[1].Substring(0, separator);
         url.resource = parsedAddress[1].Substring(separator).Trim();
     }
     else
     {
         url.server = parsedAddress[1];
     }
     return url;
 }
    private static URLAddress ParseAddress(string input)
    {
        URLAddress url = new URLAddress();

        string[] parsedAddress = input.Split(':');
        url.protocol     = parsedAddress[0];
        parsedAddress[1] = parsedAddress[1].Substring(2);
        int separator = parsedAddress[1].IndexOf('/');

        if (separator != -1)
        {
            url.server   = parsedAddress[1].Substring(0, separator);
            url.resource = parsedAddress[1].Substring(separator).Trim();
        }
        else
        {
            url.server = parsedAddress[1];
        }
        return(url);
    }
        public void Proccess_Calls_Retriever_Persister_Serializer_Deserializer()
        {
            var stringList = new List <string>()
            {
                "https://habrahabr.ru/company/it-grad/blog/341486/",
                "https://github.com/AnzhelikaKravchuk/2017-2018.MMF.BSU"
            };
            URLAddress firstUrlAddress = new URLAddress("habrahabr.ru",
                                                        new List <string> {
                "company", "it-grad", "blog", "341486"
            });
            URLAddress secondUrlAddress = new URLAddress("github.com",
                                                         new List <string> {
                "AnzhelikaKravchuk", "2017-2018.MMF.BSU"
            });

            mockForDataPersister.Setup(s => s.Save(It.IsAny <XDocument>()));
            mockForDataRetriever.Setup(s => s.Load()).Returns(stringList);
            var urlAddresses = new List <URLAddress>()
            {
                firstUrlAddress, secondUrlAddress
            };

            mockForStringToUrlAddressesTransformer.Setup(s => s.Transform(stringList)).Returns(urlAddresses);
            mockForParser.Setup(s => s.Transform(It.IsAny <string>()));
            mockForValidator.Setup(s => s.IsValid(It.IsAny <string>()));
            mockForUrlAddressesToXDocumentTransformer.Setup(s => s.Transform(urlAddresses));
            mockForLogger.Setup(s => s.Error(It.IsAny <string>()));
            var service = new XmlDocumentService(mockForDataPersister.Object, mockForDataRetriever.Object,
                                                 mockForStringToUrlAddressesTransformer.Object, mockForUrlAddressesToXDocumentTransformer.Object);

            service.Process();
            mockForDataRetriever.Verify(s => s.Load(), Times.Once);
            mockForStringToUrlAddressesTransformer.Verify(s => s.Transform(stringList), Times.Once);
            mockForUrlAddressesToXDocumentTransformer.Verify(s => s.Transform(urlAddresses), Times.Once);
            mockForDataPersister.Verify(s => s.Save(It.IsAny <XDocument>()), Times.Once);
        }