public DotvvmProjectMetadata CreateDefaultConfiguration(string directory)
        {
            var metadata = new DotvvmProjectMetadata()
            {
                Version          = 1,
                ProjectDirectory = directory,
                MetadataFilePath = Path.Combine(directory, MetadataFileName)
            };

            // find *.csproj file in the directory
            var csprojService = new CSharpProjectService();
            var csproj        = csprojService.FindCsprojInDirectory(directory);

            if (csproj != null)
            {
                csprojService.Load(csproj);
                metadata.RootNamespace = csprojService.GetRootNamespace();
                metadata.ProjectName   = csprojService.GetAssemblyName();
            }
            return(metadata);
        }
        public override void Handle(Arguments args, DotvvmProjectMetadata dotvvmProjectMetadata)
        {
            // make sure the test directory exists
            if (string.IsNullOrEmpty(dotvvmProjectMetadata.UITestProjectPath))
            {
                dotvvmProjectMetadata.UITestProjectPath = ConsoleHelpers.AskForValue($"Enter the path to the test project\n(relative to DotVVM project directory, e.g. '..\\{dotvvmProjectMetadata.ProjectName}.Tests'): ");
            }
            var testProjectDirectory = dotvvmProjectMetadata.GetUITestProjectFullPath();

            if (!Directory.Exists(testProjectDirectory))
            {
                throw new Exception($"The directory {testProjectDirectory} doesn't exist!");
            }

            // make sure we know the test project namespace
            if (string.IsNullOrEmpty(dotvvmProjectMetadata.UITestProjectRootNamespace))
            {
                var csprojService = new CSharpProjectService();
                var csproj        = csprojService.FindCsprojInDirectory(testProjectDirectory);
                if (csproj != null)
                {
                    csprojService.Load(csproj);
                    dotvvmProjectMetadata.UITestProjectRootNamespace = csprojService.GetRootNamespace();
                }
                else
                {
                    dotvvmProjectMetadata.UITestProjectRootNamespace = ConsoleHelpers.AskForValue("Enter the test project root namespace: ");
                    if (string.IsNullOrEmpty(dotvvmProjectMetadata.UITestProjectRootNamespace))
                    {
                        throw new Exception("The test project root namespace must not be empty!");
                    }
                }
            }

            // generate the test stubs
            var name  = args[0];
            var files = ExpandFileNames(name);

            foreach (var file in files)
            {
                Console.WriteLine($"Generating stub for {file}...");

                // determine full type name and target file
                var relativePath     = PathHelpers.GetDothtmlFileRelativePath(dotvvmProjectMetadata, file);
                var relativeTypeName = PathHelpers.TrimFileExtension(relativePath) + "Helper";
                var fullTypeName     = dotvvmProjectMetadata.UITestProjectRootNamespace + "." + PathHelpers.CreateTypeNameFromPath(relativeTypeName);
                var targetFileName   = Path.Combine(dotvvmProjectMetadata.UITestProjectPath, "Helpers", relativeTypeName + ".cs");

                // generate the file
                //var generator = new SeleniumHelperGenerator();
                //var config = new SeleniumGeneratorConfiguration()
                //{
                //    TargetNamespace = PathHelpers.GetNamespaceFromFullType(fullTypeName),
                //    HelperName = PathHelpers.GetTypeNameFromFullType(fullTypeName),
                //    HelperFileFullPath = targetFileName,
                //    ViewFullPath = file
                //};

                //generator.ProcessMarkupFile(DotvvmConfiguration.CreateDefault(), config);
            }
        }