📄 nunitproject.cs
字号:
/// <summary>
/// The path to which a project will be saved.
/// </summary>
public string ProjectPath
{
get { return projectPath; }
set
{
projectPath = Path.GetFullPath( value );
isDirty = true;
}
}
/// <summary>
/// The base path for the project is the
/// directory part of the project path.
/// </summary>
public string BasePath
{
get { return Path.GetDirectoryName( projectPath ); }
}
/// <summary>
/// The name of the project.
/// </summary>
public string Name
{
get { return Path.GetFileNameWithoutExtension( projectPath ); }
}
public ProjectConfig ActiveConfig
{
get
{
// In case the previous active config was removed
if ( activeConfig != null && !configs.Contains( activeConfig ) )
activeConfig = null;
// In case no active config is set or it was removed
if ( activeConfig == null && configs.Count > 0 )
activeConfig = configs[0];
return activeConfig;
}
}
// Safe access to name of the active config
public string ActiveConfigName
{
get
{
ProjectConfig config = ActiveConfig;
return config == null ? null : config.Name;
}
}
public bool IsLoadable
{
get
{
return ActiveConfig != null &&
ActiveConfig.Assemblies.Count > 0;
}
}
// A project made from a single assembly is treated
// as a transparent wrapper for some purposes until
// a change is made to it.
public bool IsAssemblyWrapper
{
get { return isAssemblyWrapper; }
}
public string ConfigurationFile
{
get
{
// TODO: Check this
return isAssemblyWrapper
? Path.GetFileName( projectPath ) + ".config"
: Path.GetFileNameWithoutExtension( projectPath ) + ".config";
}
}
public bool IsDirty
{
get { return isDirty; }
set { isDirty = value; }
}
public ProjectConfigCollection Configs
{
get { return configs; }
}
public event ProjectEventHandler Changed;
#endregion
#region Instance Methods
public void SetActiveConfig( int index )
{
activeConfig = configs[index];
OnProjectChange( ProjectChangeType.ActiveConfig, activeConfig.Name );
}
public void SetActiveConfig( string name )
{
foreach( ProjectConfig config in configs )
{
if ( config.Name == name )
{
activeConfig = config;
OnProjectChange( ProjectChangeType.ActiveConfig, activeConfig.Name );
break;
}
}
}
public void OnProjectChange( ProjectChangeType type, string configName )
{
isDirty = true;
if ( isAssemblyWrapper )
{
projectPath = Path.ChangeExtension( projectPath, ".nunit" );
isAssemblyWrapper = false;
}
if ( Changed != null )
Changed( this, new ProjectEventArgs( type, configName ) );
if ( type == ProjectChangeType.RemoveConfig && activeConfig.Name == configName )
{
if ( configs.Count > 0 )
SetActiveConfig( 0 );
}
}
public void Add( VSProject vsProject )
{
foreach( VSProjectConfig vsConfig in vsProject.Configs )
{
string name = vsConfig.Name;
if ( !this.Configs.Contains( name ) )
this.Configs.Add( name );
ProjectConfig config = this.Configs[name];
foreach ( string assembly in vsConfig.Assemblies )
config.Assemblies.Add( assembly );
}
}
public void Load()
{
XmlTextReader reader = new XmlTextReader( projectPath );
string activeConfigName = null;
ProjectConfig currentConfig = null;
try
{
reader.MoveToContent();
if ( reader.NodeType != XmlNodeType.Element || reader.Name != "NUnitProject" )
throw new ProjectFormatException(
"Invalid project format: <NUnitProject> expected.",
reader.LineNumber, reader.LinePosition );
while( reader.Read() )
if ( reader.NodeType == XmlNodeType.Element )
switch( reader.Name )
{
case "Settings":
if ( reader.NodeType == XmlNodeType.Element )
activeConfigName = reader.GetAttribute( "activeconfig" );
break;
case "Config":
if ( reader.NodeType == XmlNodeType.Element )
{
string configName = reader.GetAttribute( "name" );
currentConfig = new ProjectConfig( configName );
currentConfig.BasePath = reader.GetAttribute( "appbase" );
currentConfig.ConfigurationFile = reader.GetAttribute( "configfile" );
string binpath = reader.GetAttribute( "binpath" );
string type = reader.GetAttribute( "binpathtype" );
if ( type == null )
if ( binpath == null )
currentConfig.BinPathType = BinPathType.Auto;
else
currentConfig.BinPathType = BinPathType.Manual;
else
currentConfig.BinPathType = (BinPathType)Enum.Parse( typeof( BinPathType ), type, true );
Configs.Add( currentConfig );
if ( configName == activeConfigName )
activeConfig = currentConfig;
}
else if ( reader.NodeType == XmlNodeType.EndElement )
currentConfig = null;
break;
case "assembly":
if ( reader.NodeType == XmlNodeType.Element && currentConfig != null )
{
string path = reader.GetAttribute( "path" );
string test = reader.GetAttribute( "test" );
bool hasTests = test == null ? true : bool.Parse( test );
currentConfig.Assemblies.Add(
Path.Combine( currentConfig.BasePath, path ),
hasTests );
}
break;
default:
break;
}
this.IsDirty = false;
}
catch( XmlException e )
{
throw new ProjectFormatException(
string.Format( "Invalid project format: {0}", e.Message ),
e.LineNumber, e.LinePosition );
}
catch( Exception e )
{
throw new ProjectFormatException(
string.Format( "Invalid project format: {0} Line {1}, Position {2}",
e.Message, reader.LineNumber, reader.LinePosition ),
reader.LineNumber, reader.LinePosition );
}
finally
{
reader.Close();
}
}
public void Save()
{
projectPath = ProjectPathFromFile( projectPath );
XmlTextWriter writer = new XmlTextWriter( projectPath, System.Text.Encoding.UTF8 );
writer.Formatting = Formatting.Indented;
writer.WriteStartElement( "NUnitProject" );
if ( configs.Count > 0 )
{
writer.WriteStartElement( "Settings" );
writer.WriteAttributeString( "activeconfig", ActiveConfigName );
writer.WriteEndElement();
}
foreach( ProjectConfig config in Configs )
{
writer.WriteStartElement( "Config" );
writer.WriteAttributeString( "name", config.Name );
if ( config.RelativeBasePath != null )
writer.WriteAttributeString( "appbase", config.RelativeBasePath );
string configFile = config.ConfigurationFile;
if ( configFile != null && configFile != this.ConfigurationFile )
writer.WriteAttributeString( "configfile", config.ConfigurationFile );
if ( config.BinPathType == BinPathType.Manual )
writer.WriteAttributeString( "binpath", config.PrivateBinPath );
else
writer.WriteAttributeString( "binpathtype", config.BinPathType.ToString() );
foreach( AssemblyListItem assembly in config.Assemblies )
{
writer.WriteStartElement( "assembly" );
writer.WriteAttributeString( "path", config.RelativePathTo( assembly.FullPath ) );
if ( !assembly.HasTests )
writer.WriteAttributeString( "test", "false" );
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.Close();
this.IsDirty = false;
// Once we save a project, it's no longer
// loaded as an assembly wrapper on reload.
this.isAssemblyWrapper = false;
}
public void Save( string projectPath )
{
this.ProjectPath = projectPath;
Save();
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -