public void ObjectExtenderContainerConverterConvertFromTypeCompliantWithXmlSerializer()
		{
			MockServiceProvider mockServiceProvider = new MockServiceProvider();
			Type[] types = { typeof(TestSerializableObject) };
			MockServiceProviderService mockService = new MockServiceProviderService();
			mockService.ObjectExtenderTypes.Add(types[0]);
			mockServiceProvider.AddService(typeof(IExtensionProviderService), mockService);

			ObjectExtenderContainerConverter converter = new ObjectExtenderContainerConverter(mockServiceProvider);

			TestSerializableObject testObject1 = new TestSerializableObject();
			testObject1.ValueOne = "TestDataOne";
			testObject1.ValueTwo = 33;
			string stringRepresentation;
			ObjectExtenderContainer container1 = new ObjectExtenderContainer();
			container1.ObjectExtenders.Add(testObject1);

			stringRepresentation = GenericSerializer.Serialize<ObjectExtenderContainer>(container1, types);

			ObjectExtenderContainer container2 = converter.ConvertFrom(stringRepresentation) as ObjectExtenderContainer;

			Assert.IsNotNull(container2, "container is null");
			Assert.IsNotNull(container2.ObjectExtenders, "ObjectExtenders is null");
			Assert.AreEqual(1, container2.ObjectExtenders.Count, "container.ObjectExtenders.Count != 1");

			TestSerializableObject testObject2 = container2.ObjectExtenders[0] as TestSerializableObject;
			Assert.AreEqual(testObject1.ValueOne, testObject2.ValueOne, "Not equal");
			Assert.AreEqual(testObject1.ValueTwo, testObject2.ValueTwo, "Not equal");
		}
		public void TestInitialize()
		{
			serviceProvider = new MockMappingServiceProvider();

			ServiceContract sc = CreateServiceContractModel();
			CreateHostDesignerModel(sc);

			// Initialize validator's config
			attributes = new NameValueCollection();
			attributes.Add("elementNameProperty", "Name");
		}
		public void ObjectExtenderContainerConverterCanConvertFromString()
		{
			MockServiceProvider mockServiceProvider = new MockServiceProvider();
			MockServiceProviderService mockService = new MockServiceProviderService();

			mockServiceProvider.AddService(typeof(IExtensionProviderService), mockService);

			ObjectExtenderContainerConverter converter = new ObjectExtenderContainerConverter(mockServiceProvider);

			Assert.IsTrue(converter.CanConvertFrom(typeof(string)), "Cannot convert from a string");
		}
		public void EditValueWithNoFormsServiceThrows()
		{
			MockVSHierarchy root = new MockVSHierarchy();
			MockVsSolution solution = new MockVsSolution(root);
			MockServiceProvider serviceProvider = new MockServiceProvider();
			serviceProvider.AddService(typeof(IVsSolution), solution);
			MockTypeDescriptorContext context = new MockTypeDescriptorContext(serviceProvider);
			string value = "Project1.txt";
			MockVSHierarchy project = new MockVSHierarchy(value);
			root.AddProject(project);
			SolutionPickerEditor target = new SolutionPickerEditor();
			target.EditValue(serviceProvider, null);
		}
		public void ExtensionProviderContainerConverterConvertToExtensionProvider()
		{
			MockExtensionProvider provider = new MockExtensionProvider();
			MockServiceProvider mockServiceProvider = new MockServiceProvider();
			MockServiceProviderService mockService = new MockServiceProviderService();

			mockServiceProvider.AddService(typeof(IExtensionProviderService), mockService);

			ExtensionProviderConverter converter = new ExtensionProviderConverter(mockServiceProvider);

			MockExtensionProvider provider1 = converter.ConvertFrom(provider.ToString()) as MockExtensionProvider;

			Assert.AreEqual(provider.Id, provider1.Id, "Not Equal");
			Assert.AreEqual(provider.Description, provider1.Description, "Not Equal");
			Assert.AreEqual(provider.Name, provider1.Name, "Not Equal");
		}
        public void TestInitialize()
        {
            serviceProvider = new MockMappingServiceProvider();

			attributes = new NameValueCollection();
			attributes.Add("elementNameProperty", "Name");

            #region Data Contract
            dcStore = new Store(serviceProvider, typeof(CoreDesignSurfaceDomainModel), typeof(DataContractDslDomainModel));
            dcDomainModel = dcStore.GetDomainModel<DataContractDslDomainModel>();
            dcTransaction = dcStore.TransactionManager.BeginTransaction();
            dcModel = (DataContractModel)dcDomainModel.CreateElement(new Partition(dcStore), typeof(DataContractModel), null);
            dcModel.ProjectMappingTable = projectMappingTableName;
            dc = dcStore.ElementFactory.CreateElement(DataContract.DomainClassId) as DataContract;
			primitiveDataElement = dcStore.ElementFactory.CreateElement(PrimitiveDataType.DomainClassId) as PrimitiveDataType;
            primitiveDataElement.Name = primitiveDataElementName;
			dc.DataMembers.Add(primitiveDataElement);
			dcModel.Contracts.Add(dc);
            #endregion

			#region Service Contract
			scStore = new Store(serviceProvider, typeof(CoreDesignSurfaceDomainModel), typeof(ServiceContractDslDomainModel));
			scDomainModel = scStore.GetDomainModel<ServiceContractDslDomainModel>();
			scTransaction = scStore.TransactionManager.BeginTransaction();
			scModel = (ServiceContractModel)scDomainModel.CreateElement(new Partition(scStore), typeof(ServiceContractModel), null);
			scModel.ProjectMappingTable = projectMappingTableName;
			msg = scStore.ElementFactory.CreateElement(Message.DomainClassId) as Message;
			msg.Name = messageName;

            //Create the moniker
            //mel://[DSLNAMESPACE]\[MODELELEMENTTYPE]\[MODELELEMENT.GUID]@[PROJECT]\[MODELFILE]
            string requestMoniker = string.Format(@"mel://{0}\{1}\{2}@{3}\{4}",
                primitiveDataElement.GetType().Namespace,
                primitiveDataElement.GetType().Name,
                primitiveDataElement.Id.ToString(),
                dataContractModelProjectName, dataContractModelFileName);

			part = scStore.ElementFactory.CreateElement(DataContractMessagePart.DomainClassId) as DataContractMessagePart;
			part.Name = partName;
            part.Type = new MockModelBusReference(primitiveDataElement);
			
            msg.MessageParts.Add(part);
			scModel.Messages.Add(msg);
            #endregion
        }
        public void TestInitialize()
        {
            serviceProvider = new MockMappingServiceProvider();

			scStore = new Store(serviceProvider, typeof(CoreDesignSurfaceDomainModel), typeof(ServiceContractDslDomainModel));			
			scDomainModel = scStore.GetDomainModel<ServiceContractDslDomainModel>();
			scTransaction = scStore.TransactionManager.BeginTransaction();

			scModel = (ServiceContractModel)scDomainModel.CreateElement(new Partition(scStore), typeof(ServiceContractModel), null);
			scModel.ImplementationTechnology = new ServiceContractWCFExtensionProvider();
			scModel.ProjectMappingTable = projectMappingTableName;

			ServiceContract sc = scStore.ElementFactory.CreateElement(ServiceContract.DomainClassId) as ServiceContract;
			sc.Name = serviceContractName;

			scModel.ServiceContracts.Add(sc);

			hdStore = new Store(serviceProvider, typeof(CoreDesignSurfaceDomainModel), typeof(HostDesignerDomainModel));
			hdDomainModel = hdStore.GetDomainModel<HostDesignerDomainModel>();
            hdTransaction = hdStore.TransactionManager.BeginTransaction();
			hdModel = (HostDesignerModel)hdDomainModel.CreateElement(new Partition(hdStore), typeof(HostDesignerModel), null);

			HostApplication app = (HostApplication)hdStore.ElementFactory.CreateElement(HostApplication.DomainClassId);

			app.ImplementationTechnology = new HostDesignerWcfExtensionProvider();

			reference = (ServiceReference)hdStore.ElementFactory.CreateElement(ServiceReference.DomainClassId);

			//mel://[DSLNAMESPACE]\[MODELELEMENTTYPE]\[MODELELEMENT.GUID]@[PROJECT]\[MODELFILE]
			string serviceMoniker = string.Format(@"mel://{0}\{1}\{2}@{3}\{4}",
				sc.GetType().Namespace,
				serviceContractName,
				sc.Id.ToString(),
				serviceContractModelProjectName, serviceContractModelFileName);

			reference.Name = serviceMelReferenceName;
            reference.ServiceImplementationType = new MockModelBusReference(sc);

			app.ServiceDescriptions.Add(reference);

			// Initialize validator's config
            attributes = new NameValueCollection();
            attributes.Add("elementNameProperty", "Name");
        }
        public void TestInitialize()
        {
            serviceProvider = new MockMappingServiceProvider();

			attributes = new NameValueCollection();
			attributes.Add("elementNameProperty", "Name");

            #region Data Contract
            dcStore = new Store(serviceProvider, typeof(CoreDesignSurfaceDomainModel), typeof(DataContractDslDomainModel));
            dcDomainModel = dcStore.GetDomainModel<DataContractDslDomainModel>();
            dcTransaction = dcStore.TransactionManager.BeginTransaction();
            dcModel = (DataContractModel)dcDomainModel.CreateElement(new Partition(dcStore), typeof(DataContractModel), null);
            dcModel.ProjectMappingTable = projectMappingTableName;
            fc = dcStore.ElementFactory.CreateElement(FaultContract.DomainClassId) as FaultContract;
            fc.Name = faultContractName;
			dcModel.Contracts.Add(fc);
            #endregion

			#region Service Contract
			scStore = new Store(serviceProvider, typeof(CoreDesignSurfaceDomainModel), typeof(ServiceContractDslDomainModel));
			scDomainModel = scStore.GetDomainModel<ServiceContractDslDomainModel>();
			scTransaction = scStore.TransactionManager.BeginTransaction();
			scModel = (ServiceContractModel)scDomainModel.CreateElement(new Partition(scStore), typeof(ServiceContractModel), null);
			scModel.ProjectMappingTable = projectMappingTableName;
            operation = scStore.ElementFactory.CreateElement(Operation.DomainClassId) as Operation;
            operation.Name = operationName;

            //Create the moniker
            //mel://[DSLNAMESPACE]\[MODELELEMENTTYPE]\[MODELELEMENT.GUID]@[PROJECT]\[MODELFILE]
            string requestMoniker = string.Format(@"mel://{0}\{1}\{2}@{3}\{4}",
                fc.GetType().Namespace,
                fc.GetType().Name,
                fc.Id.ToString(),
                dataContractModelProjectName, dataContractModelFileName);

            dcfault = scStore.ElementFactory.CreateElement(DataContractFault.DomainClassId) as DataContractFault;
			dcfault.Name = dcfaultName;
            dcfault.Type = new MockModelBusReference(fc);
            
            operation.Faults.Add(dcfault);
			scModel.Operations.Add(operation);
            #endregion
        }
		public void TestValidate()
		{
			MockServiceProvider serviceProvider = new MockServiceProvider();
			MockVSHierarchy root = new MockVSHierarchy();
			MockVsSolution solution = new MockVsSolution(root);
			MockVSHierarchy project = new MockVSHierarchy("Project1.project");
			root.AddProject(project);
			serviceProvider.AddService(typeof(SVsSolution), solution);
			CodeGenerationService target = new CodeGenerationService(serviceProvider);
			MyArtifactLink validLink = new MyArtifactLink(project.GUID, "item1.cs");

			Assert.IsTrue(target.IsValid(validLink));
			MyArtifactLink invalidLink1 = new MyArtifactLink(Guid.NewGuid(), "item2.cs");
			Assert.IsFalse(target.IsValid(invalidLink1));
			MyArtifactLink invalidLink2 = new MyArtifactLink(project.GUID, "it:em3.cs");
			Assert.IsFalse(target.IsValid(invalidLink2));
			MyArtifactLink invalidLink3 = new MyArtifactLink(Guid.NewGuid(), "<item3.cs>");
			Assert.IsFalse(target.IsValid(invalidLink3));
		}
		public void ObjectExtenderContainerConverterConvertToTypeCompliantWithXmlSerializer()
		{
			MockServiceProvider mockServiceProvider = new MockServiceProvider();
			MockServiceProviderService mockService = new MockServiceProviderService();

			mockServiceProvider.AddService(typeof(IExtensionProviderService), mockService);

			ObjectExtenderContainerConverter converter = new ObjectExtenderContainerConverter(mockServiceProvider);

			TestSerializableObject testObject1 = new TestSerializableObject();
			testObject1.ValueOne = "TestDataOne";
			testObject1.ValueTwo = 33;
			string stringRepresentation;
			Type[] types = { typeof(TestSerializableObject) };
			ObjectExtenderContainer container1 = new ObjectExtenderContainer();
			container1.ObjectExtenders.Add(testObject1);

			stringRepresentation = GenericSerializer.Serialize<ObjectExtenderContainer>(container1, types);

			string stringRepresentation2 = converter.ConvertTo(stringRepresentation, typeof(string)) as string;

			Assert.AreEqual(stringRepresentation, stringRepresentation2, "Not equal");
		}
		private static CodeGenerationService CreateCodeGenerator(string itemPath, out MockVsRDT rdt)
		{
			string fullItemPath = Path.Combine(Directory.GetCurrentDirectory(), itemPath);
			string fullProjectPath = Path.Combine(Directory.GetCurrentDirectory(), "Project.project");
			MockServiceProvider serviceProvider = new MockServiceProvider();
			MockVSHierarchy vsHierarchy = new MockVSHierarchy(fullProjectPath);
			MockVsSolution vsSolution = new MockVsSolution(vsHierarchy);
			rdt = new MockVsRDT(fullItemPath, vsHierarchy, 0);
			MockVsTextManager textManager = new MockVsTextManager();
            MockVsUIShellOpenDocument shellOpenDocument = new MockVsUIShellOpenDocument();
			serviceProvider.AddService(typeof(SVsSolution), vsSolution);
			serviceProvider.AddService(typeof(IVsRunningDocumentTable), rdt);
			serviceProvider.AddService(typeof(VsTextManagerClass), textManager);
            serviceProvider.AddService(typeof(SVsUIShellOpenDocument), shellOpenDocument);
			return new TestableCodeGenerationService(serviceProvider);
		}
		public void TestValidateEmptyRename()
		{
			MockServiceProvider serviceProvider = new MockServiceProvider();
			MockVSHierarchy root = new MockVSHierarchy();
			MockVsSolution solution = new MockVsSolution(root);
			MockVSHierarchy project = new MockVSHierarchy("Project1.project");
			root.AddProject(project);
			serviceProvider.AddService(typeof(SVsSolution), solution);
			TestableCodeGenerationService target = new TestableCodeGenerationService(serviceProvider);
			string oldName = "item1";
			string newName = "";
			MyArtifactLink validLink = new MyArtifactLink(project.GUID, oldName + ".cs");
			HierarchyNode node = target.ValidateRename(validLink, newName, oldName);

			Assert.IsNull(node);
			project.AddChild(oldName + ".cs");
			node = target.ValidateRename(validLink, oldName, oldName);
			Assert.IsNull(node);
			Assert.AreEqual<int>(0, target.LogEntries.Count);
			node = target.ValidateRename(validLink, newName, oldName);
			Assert.IsNotNull(node);
			Assert.AreEqual<int>(1, target.LogEntries.Count);
		}
		public void TestArtifactIsGenerated()
		{
			MockServiceProvider serviceProvider = new MockServiceProvider();
			MockVSHierarchy root = new MockVSHierarchy();
			MockVsSolution solution = new MockVsSolution(root);
			MockVSHierarchy project = new MockVSHierarchy("Project1.project");
			root.AddProject(project);
			serviceProvider.AddService(typeof(SVsSolution), solution);
			CodeGenerationService target = new CodeGenerationService(serviceProvider);
			MyArtifactLink validLink = new MyArtifactLink(project.GUID, "item1.cs");

			Assert.IsFalse(target.IsArtifactAlreadyGenerated(validLink));
			project.AddChild("item1.cs");
			Assert.IsTrue(target.IsArtifactAlreadyGenerated(validLink));
		}
		public void GetArtifactsReturnsNull()
		{
			MockServiceProvider mockServiceProvider = new MockServiceProvider();
			IArtifactLinkContainer links = ModelCollector.GetArtifacts(mockServiceProvider);
			Assert.IsNull(links);
		}