public void Load(ReplaceableCodeInfo specifications)
 {
     Clear();
     RegisterAll(specifications.Methods.As<IReplaceableReference>());
     RegisterAll(specifications.FieldAccessors.As<IReplaceableReference>());
     RegisterAll(specifications.FieldAssignments.As<IReplaceableReference>());
 }
 public void SerializeSpecifications(string filename, ReplaceableCodeInfo specs)
 {
     var serializer = new XmlSerializer(typeof(ReplaceableCodeInfo));
     using (var binFile = File.Create(Path.Combine(path, filename)))
     {
         serializer.Serialize(binFile, specs);
         binFile.Close();
     }
 }
        public ReplaceableCodeInfo DeserializeAllSpecifications()
        {
            var assemblyPath = Path.GetDirectoryName(path);
            var files = Directory.GetFiles(assemblyPath, "*.SharpMock.SerializedSpecifications.xml");

            var aggregate = new ReplaceableCodeInfo();
            foreach (var specList in files)
            {
                var serializer = new XmlSerializer(typeof(ReplaceableCodeInfo));
                using (var fileStream = File.Open(specList, FileMode.Open))
                {
                    var deserializedInfo = serializer.Deserialize(fileStream) as ReplaceableCodeInfo;
                    aggregate = deserializedInfo.Merge(aggregate);
                    fileStream.Close();
                }
            }

            return aggregate;
        }
        public void Execute(PostCompilerContext context)
        {
            var specAssembly = Path.GetFileNameWithoutExtension(context.Args.TestAssemblyPath);
            var autoSpecs = String.Format("{0}.Fluent.SharpMock.SerializedSpecifications.xml", specAssembly);

            var serializer = new ReplaceableCodeInfoSerializer(
                Path.GetDirectoryName(context.Args.TestAssemblyPath));

            var replaceableAssignments = context.Registry.GetRegisteredReferences(ReplaceableReferenceTypes.FieldAssignment);
            var replaceableAccessors = context.Registry.GetRegisteredReferences(ReplaceableReferenceTypes.FieldAccessor);
            var replaceableMethods = context.Registry.GetRegisteredReferences(ReplaceableReferenceTypes.Method);

            var replaceableCode = new ReplaceableCodeInfo();
            replaceableCode.Methods = replaceableMethods.As<ReplaceableMethodInfo>();
            replaceableCode.FieldAccessors = replaceableAccessors.As<ReplaceableFieldInfo>();
            replaceableCode.FieldAssignments = replaceableAssignments.As<ReplaceableFieldInfo>();

            serializer.SerializeSpecifications(autoSpecs, replaceableCode);
            SerializeExplicitSpecifications(context.Args.TestAssemblyPath);
        }
        private void SerializeExplicitSpecifications(string specAssembly)
        {
            var assembly = System.Reflection.Assembly.LoadFrom(specAssembly);
            var specs = new List<Type>(assembly.GetTypes())
                .FindAll(t => typeof(IReplacementSpecification).IsAssignableFrom(t));

            var specifiedMethods = new List<ReplaceableMethodInfo>();

            foreach (var specType in specs)
            {
                var spec = Activator.CreateInstance(specType) as IReplacementSpecification;
                specifiedMethods.AddRange(spec.GetMethodsToReplace());
            }

            var specPath = Path.GetDirectoryName(specAssembly);
            var specAssemblyName = Path.GetFileNameWithoutExtension(specAssembly);
            var serializedSpecName = String.Format("{0}.SharpMock.SerializedSpecifications.xml", specAssemblyName);

            var replaceableCode = new ReplaceableCodeInfo();
            replaceableCode.Methods = specifiedMethods;

            var serializer = new ReplaceableCodeInfoSerializer(specPath);
            serializer.SerializeSpecifications(serializedSpecName, replaceableCode);
        }