예제 #1
0
        public static void Describe(Loader environment, TestDependency script)
        {
            EnsureFresh();

            var path = script.ScriptName;
            var dependencies = script.Dependencies ?? Enumerable.Empty<string>();

            var file = environment.ApplyLoadPaths(path);
            if (file == null || !file.Exists)
                throw new PrexoniteException(string.Format("Cannot find script {0}.", path));

            var moduleName = new ModuleName(Path.GetFileNameWithoutExtension(path), new Version(0, 0));

            if (Cache.TargetDescriptions.Contains(moduleName))
            {
                _trace.TraceEvent(TraceEventType.Verbose, 0,
                    "ModuleCache already contains a description of {0} on thread {1}, no action necessary.", moduleName,
                    Thread.CurrentThread.ManagedThreadId);
                return;
            }

            var dependencyNames =
                dependencies.Select(dep => 
                    new ModuleName(Path.GetFileNameWithoutExtension(dep), new Version(0, 0))).ToArray();

            // Manually add legacy symbol and stdlib dependencies
            var effectiveDependencies = dependencyNames.Append(LegacySymbolsDescription.Name).Append(StdlibDescription.Name);
            var desc = Cache.CreateDescription(moduleName, Source.FromFile(file,Encoding.UTF8), path, effectiveDependencies);
            _trace.TraceEvent(TraceEventType.Information, 0,
                "Adding new target description for cache on thread {0}: {1}.", Thread.CurrentThread.ManagedThreadId,
                desc);
            Cache.TargetDescriptions.Add(desc);
        }