public void EnumeratesSourceFilesOfContentTypesWithSourceSymbolProviderService()
        {
            // cs and js have associated ISourceSymbolProvider
            var cs = ContentTypeWithSourceSymbolProvider();
            var js = ContentTypeWithSourceSymbolProvider();

            // txt doesn't have an associated ISourceSymbolProvider
            var txt = MockFor <IContentType>(MockBehavior.Loose).Object;

            var contentTypeRegistry = MockFor <IContentTypeRegistry>();

            contentTypeRegistry
            .SetupGet(_ => _.ContentTypes)
            .Returns(new[] { txt, cs, js });
            contentTypeRegistry
            .Setup(_ => _.FileExtensionsFor(cs))
            .Returns(new[] { ".cs" });
            contentTypeRegistry
            .Setup(_ => _.FileExtensionsFor(js))
            .Returns(new[] { ".js", ".us" });

            var sourceFolderProvider = MockFor <IUnityAssetsFolderProvider>();
            var sourceFolder         = MockFor <IFolder>();

            sourceFolderProvider
            .SetupGet(_ => _.AssetsFolder)
            .Returns(sourceFolder.Object);
            var csFile = MockFor <IFile>().Object;

            sourceFolder
            .Setup(_ => _.SearchFiles("*.cs", SearchOption.AllDirectories))
            .Returns(new[] { csFile });
            var jsFile = MockFor <IFile>().Object;

            sourceFolder
            .Setup(_ => _.SearchFiles("*.js", SearchOption.AllDirectories))
            .Returns(new[] { jsFile });
            var usFile = MockFor <IFile>().Object;

            sourceFolder
            .Setup(_ => _.SearchFiles("*.us", SearchOption.AllDirectories))
            .Returns(new[] { usFile });

            var subject = new SourceFilesProvider
            {
                ContentTypeRegistry  = contentTypeRegistry.Object,
                SourceFolderProvider = sourceFolderProvider.Object
            };
            var fileNotifications = subject.SourceFiles.Take(3).ToEnumerable();

            CollectionAssert.AreEquivalent(
                new[] {
                new { File = csFile, NotificationKind = FileNotificationKind.New },
                new { File = jsFile, NotificationKind = FileNotificationKind.New },
                new { File = usFile, NotificationKind = FileNotificationKind.New }
            },
                fileNotifications.Select(_ => new { _.File, _.NotificationKind }));
        }
		public void EnumeratesSourceFilesOfContentTypesWithSourceSymbolProviderService()
		{
			// cs and js have associated ISourceSymbolProvider
			var cs = ContentTypeWithSourceSymbolProvider();
			var js = ContentTypeWithSourceSymbolProvider();

			// txt doesn't have an associated ISourceSymbolProvider
			var txt = MockFor<IContentType>(MockBehavior.Loose).Object;

			var contentTypeRegistry = MockFor<IContentTypeRegistry>();
			contentTypeRegistry
				.SetupGet(_ => _.ContentTypes)
				.Returns(new[] {txt, cs, js});
			contentTypeRegistry
				.Setup(_ => _.FileExtensionsFor(cs))
				.Returns(new[] {".cs"});
			contentTypeRegistry
				.Setup(_ => _.FileExtensionsFor(js))
				.Returns(new[] {".js", ".us"});

			var sourceFolderProvider = MockFor<IUnityAssetsFolderProvider>();
			var sourceFolder = MockFor<IFolder>();
			sourceFolderProvider
				.SetupGet(_ => _.AssetsFolder)
				.Returns(sourceFolder.Object);
			var csFile = MockFor<IFile>().Object;
			sourceFolder
				.Setup(_ => _.SearchFiles("*.cs", SearchOption.AllDirectories))
				.Returns(new[] {csFile});
			var jsFile = MockFor<IFile>().Object;
			sourceFolder
				.Setup(_ => _.SearchFiles("*.js", SearchOption.AllDirectories))
				.Returns(new[] {jsFile});
			var usFile = MockFor<IFile>().Object;
			sourceFolder
				.Setup(_ => _.SearchFiles("*.us", SearchOption.AllDirectories))
				.Returns(new[] {usFile});

			var subject = new SourceFilesProvider
			{
				ContentTypeRegistry = contentTypeRegistry.Object,
				SourceFolderProvider = sourceFolderProvider.Object
			};
			var fileNotifications = subject.SourceFiles.Take(3).ToEnumerable();
			CollectionAssert.AreEquivalent(
				new[] {
					new { File = csFile, NotificationKind = FileNotificationKind.New },
					new { File = jsFile, NotificationKind = FileNotificationKind.New },
					new { File = usFile, NotificationKind = FileNotificationKind.New }},
				fileNotifications.Select(_ => new { _.File, _.NotificationKind }));
		}