public void ThrowsExceptionWhenPassingNullReferenceArgumentToConstructor()
 {
     FormattedText password = null;
     Assert.Throws(typeof(NullReferenceException), delegate()
     {
         PasswordConsumer consumer = new PasswordConsumer(password);
     });
 }
 public void StartConsumption_ThrowsExceptionWhenPassingNullReferenceArgument()
 {
     SmartWarehouse<FormattedText> warehoue = null;
     PasswordConsumer consumer = new PasswordConsumer(new FormattedText("abc"));
     Assert.Throws(typeof(NullReferenceException), delegate()
     {
         consumer.StartConsumption(warehoue);
     });
 }
 public void StartConsumption_ThrowsExceptionWhenConsumptionAlreadyStarted()
 {
     SmartWarehouse<FormattedText> warehoue = new SmartWarehouse<FormattedText>(20);
     PasswordConsumer consumer = new PasswordConsumer(new FormattedText("abc"));
     consumer.StartConsumption(warehoue);
     Assert.Throws(typeof(InvalidOperationException), delegate()
     {
         consumer.StartConsumption(warehoue);
     });
 }
 public void AddConsumer_ThrowsExceptionWhenPassingSameConsumerMoreThanOnce()
 {
     SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20);
     PasswordDistributor distributor = new PasswordDistributor(warehouse);
     PasswordConsumer consumer = new PasswordConsumer(new FormattedText("cba"));
     distributor.AddConsumer(consumer);
     Assert.Throws(typeof(ArgumentException), delegate()
     {
         distributor.AddConsumer(consumer);
     });
 }
        public void StartConsumption_ThrowsExceptionWhenTryingToCallMethodWhenConsumptionIsNotStopped()
        {
            SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20);
            PasswordDistributor distributor = new PasswordDistributor(warehouse);
            PasswordConsumer consumer = new PasswordConsumer(new FormattedText("cba"));
            consumer.PasswordTakingMaximumTime = 20;
            distributor.AddConsumer(consumer);

            distributor.StartConsumption();
            Assert.Throws(typeof(InvalidOperationException), delegate()
            {
                distributor.StartConsumption();
            });
            Thread.Sleep(2);
            consumer.StopConsumption();
        }
        public void AddConsumer(PasswordConsumer consumer)
        {
            if (consumer == null)
                throw new NullReferenceException();
            if(consumers.Contains(consumer))
                throw new ArgumentException("Consumer is already on list.");

            consumers.Add(consumer);
            consumer.OnDesiredPasswordFound += (Action)OnPasswordFoundByConsumer;

            lock (synchronizationObject)
            {
                if (ConsumptionStarted)
                    consumer.StartConsumption(warehouse);
            }
        }
        static void Main(string[] args)
        {
            SmartWarehouse<FormattedText> warehouse = new SmartWarehouse<FormattedText>(20);
            PasswordProducer pp = new PasswordProducer(new FormattedText("abc"));
            PasswordConsumer pc = new PasswordConsumer(new FormattedText("cba"));

            PasswordDistributor distributor = new PasswordDistributor(warehouse);
            distributor.AddProducer(pp);
            distributor.AddConsumer(pc);
            distributor.StartConsumption();

            PasswordConsumer consumer = new PasswordConsumer(new FormattedText("bca"));
            distributor.AddConsumer(consumer);

            distributor.StartProduction();

            PasswordProducer producer = new PasswordProducer(new FormattedText("abc"));
            distributor.AddProducer(producer);

            Console.ReadLine();
            Console.WriteLine(warehouse.Count);
        }
 public void ReturnsConsumerObject()
 {
     FormattedText password = new FormattedText("abc");
     PasswordConsumer consumer = new PasswordConsumer(password);
     Assert.IsNotNull(password);
 }