mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Update sql projects tree to use sqlproj uri instead of parent nodes (#21901)
* update sql projects tree to use sqlproj uri instead of parent nodes * remove todo * undo other change * update a couple more
This commit is contained in:
@@ -13,9 +13,10 @@ export abstract class BaseProjectTreeItem {
|
|||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
* @param relativeProjectUri Project-relative URI that's compatible with the project tree
|
* @param relativeProjectUri Project-relative URI that's compatible with the project tree
|
||||||
|
* @param sqlprojUri Full URI to the .sqlproj of this project
|
||||||
* @param parent parent tree item
|
* @param parent parent tree item
|
||||||
*/
|
*/
|
||||||
constructor(public relativeProjectUri: vscode.Uri, public parent?: BaseProjectTreeItem) { }
|
constructor(public relativeProjectUri: vscode.Uri, public sqlprojUri: vscode.Uri, public parent?: BaseProjectTreeItem) { }
|
||||||
|
|
||||||
abstract get children(): BaseProjectTreeItem[];
|
abstract get children(): BaseProjectTreeItem[];
|
||||||
|
|
||||||
|
|||||||
@@ -18,15 +18,26 @@ import { IDatabaseReferenceProjectEntry } from 'sqldbproj';
|
|||||||
export class DatabaseReferencesTreeItem extends BaseProjectTreeItem {
|
export class DatabaseReferencesTreeItem extends BaseProjectTreeItem {
|
||||||
private references: DatabaseReferenceTreeItem[] = [];
|
private references: DatabaseReferenceTreeItem[] = [];
|
||||||
|
|
||||||
constructor(project: ProjectRootTreeItem) {
|
/**
|
||||||
super(vscode.Uri.file(path.join(project.relativeProjectUri.fsPath, constants.databaseReferencesNodeName)), project);
|
* Constructor
|
||||||
|
* @param projectNodeName Name of the project node. Used for creating the relative path of the Database References node to the project
|
||||||
|
* @param sqlprojUri Full URI to the .sqlproj
|
||||||
|
* @param databaseReferences Array of database references in the project
|
||||||
|
* @param project
|
||||||
|
*/
|
||||||
|
constructor(projectNodeName: string, sqlprojUri: vscode.Uri, databaseReferences: IDatabaseReferenceProjectEntry[], project: ProjectRootTreeItem) {
|
||||||
|
super(vscode.Uri.file(path.join(projectNodeName, constants.databaseReferencesNodeName)), sqlprojUri, project);
|
||||||
|
|
||||||
this.construct();
|
this.construct(databaseReferences);
|
||||||
}
|
}
|
||||||
|
|
||||||
private construct() {
|
private construct(databaseReferences: IDatabaseReferenceProjectEntry[]) {
|
||||||
for (const reference of (this.parent as ProjectRootTreeItem).project.databaseReferences) {
|
if (!databaseReferences) {
|
||||||
this.references.push(new DatabaseReferenceTreeItem(reference, this));
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const reference of databaseReferences) {
|
||||||
|
this.references.push(new DatabaseReferenceTreeItem(reference, this.relativeProjectUri, this.sqlprojUri, this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,8 +55,8 @@ export class DatabaseReferencesTreeItem extends BaseProjectTreeItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class DatabaseReferenceTreeItem extends BaseProjectTreeItem {
|
export class DatabaseReferenceTreeItem extends BaseProjectTreeItem {
|
||||||
constructor(private reference: IDatabaseReferenceProjectEntry, referencesTreeItem: DatabaseReferencesTreeItem) {
|
constructor(private reference: IDatabaseReferenceProjectEntry, referencesNodeRelativeProjectUri: vscode.Uri, sqlprojUri: vscode.Uri, referencesTreeItem: DatabaseReferencesTreeItem) {
|
||||||
super(vscode.Uri.file(path.join(referencesTreeItem.relativeProjectUri.fsPath, reference.databaseName)), referencesTreeItem);
|
super(vscode.Uri.file(path.join(referencesNodeRelativeProjectUri.fsPath, reference.databaseName)), sqlprojUri, referencesTreeItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public get children(): BaseProjectTreeItem[] {
|
public get children(): BaseProjectTreeItem[] {
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ import * as path from 'path';
|
|||||||
import * as utils from '../../common/utils';
|
import * as utils from '../../common/utils';
|
||||||
import { BaseProjectTreeItem } from './baseTreeItem';
|
import { BaseProjectTreeItem } from './baseTreeItem';
|
||||||
import { ProjectRootTreeItem } from './projectTreeItem';
|
import { ProjectRootTreeItem } from './projectTreeItem';
|
||||||
import { Project } from '../project';
|
import { DatabaseProjectItemType, sqlprojExtension } from '../../common/constants';
|
||||||
import { DatabaseProjectItemType } from '../../common/constants';
|
|
||||||
import { IconPathHelper } from '../../common/iconHelper';
|
import { IconPathHelper } from '../../common/iconHelper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -19,8 +18,8 @@ export class FolderNode extends BaseProjectTreeItem {
|
|||||||
public fileChildren: { [childName: string]: (FolderNode | FileNode) } = {};
|
public fileChildren: { [childName: string]: (FolderNode | FileNode) } = {};
|
||||||
public fileSystemUri: vscode.Uri;
|
public fileSystemUri: vscode.Uri;
|
||||||
|
|
||||||
constructor(folderPath: vscode.Uri, parent: FolderNode | ProjectRootTreeItem) {
|
constructor(folderPath: vscode.Uri, sqlprojUri: vscode.Uri, parent: FolderNode | ProjectRootTreeItem) {
|
||||||
super(fsPathToProjectUri(folderPath, parent.root as ProjectRootTreeItem), parent);
|
super(fsPathToProjectUri(folderPath, sqlprojUri), sqlprojUri, parent);
|
||||||
this.fileSystemUri = folderPath;
|
this.fileSystemUri = folderPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,10 +34,6 @@ export class FolderNode extends BaseProjectTreeItem {
|
|||||||
|
|
||||||
return folderItem;
|
return folderItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public get project(): Project {
|
|
||||||
return (<FolderNode | ProjectRootTreeItem>this.parent).project;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,8 +42,8 @@ export class FolderNode extends BaseProjectTreeItem {
|
|||||||
export class FileNode extends BaseProjectTreeItem {
|
export class FileNode extends BaseProjectTreeItem {
|
||||||
public fileSystemUri: vscode.Uri;
|
public fileSystemUri: vscode.Uri;
|
||||||
|
|
||||||
constructor(filePath: vscode.Uri, parent: FolderNode | ProjectRootTreeItem) {
|
constructor(filePath: vscode.Uri, sqlprojUri: vscode.Uri, parent: FolderNode | ProjectRootTreeItem) {
|
||||||
super(fsPathToProjectUri(filePath, parent.root as ProjectRootTreeItem, true), parent);
|
super(fsPathToProjectUri(filePath, sqlprojUri, true), sqlprojUri, parent);
|
||||||
this.fileSystemUri = filePath;
|
this.fileSystemUri = filePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,8 +102,9 @@ export function sortFileFolderNodes(a: (FolderNode | FileNode), b: (FolderNode |
|
|||||||
/**
|
/**
|
||||||
* Converts a full filesystem URI to a project-relative URI that's compatible with the project tree
|
* Converts a full filesystem URI to a project-relative URI that's compatible with the project tree
|
||||||
*/
|
*/
|
||||||
function fsPathToProjectUri(fileSystemUri: vscode.Uri, projectNode: ProjectRootTreeItem, isFile?: boolean): vscode.Uri {
|
function fsPathToProjectUri(fileSystemUri: vscode.Uri, sqlprojUri: vscode.Uri, isFile?: boolean): vscode.Uri {
|
||||||
const projBaseDir = projectNode.project.projectFolderPath;
|
const projBaseDir = path.dirname(sqlprojUri.fsPath);
|
||||||
|
const projectFolderName = path.basename(sqlprojUri.fsPath, sqlprojExtension);
|
||||||
let localUri = '';
|
let localUri = '';
|
||||||
|
|
||||||
if (fileSystemUri.fsPath.startsWith(projBaseDir)) {
|
if (fileSystemUri.fsPath.startsWith(projBaseDir)) {
|
||||||
@@ -120,5 +116,5 @@ function fsPathToProjectUri(fileSystemUri: vscode.Uri, projectNode: ProjectRootT
|
|||||||
localUri = parts[parts.length - 1];
|
localUri = parts[parts.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
return vscode.Uri.file(path.join(projectNode.relativeProjectUri.fsPath, localUri));
|
return vscode.Uri.file(path.join(projectFolderName, localUri));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,14 +26,17 @@ export class ProjectRootTreeItem extends BaseProjectTreeItem {
|
|||||||
fileChildren: { [childName: string]: (fileTree.FolderNode | fileTree.FileNode) } = {};
|
fileChildren: { [childName: string]: (fileTree.FolderNode | fileTree.FileNode) } = {};
|
||||||
project: Project;
|
project: Project;
|
||||||
fileSystemUri: vscode.Uri;
|
fileSystemUri: vscode.Uri;
|
||||||
|
projectNodeName: string;
|
||||||
|
|
||||||
constructor(project: Project) {
|
constructor(project: Project) {
|
||||||
super(vscode.Uri.parse(path.basename(project.projectFilePath, sqlprojExtension)), undefined);
|
super(vscode.Uri.parse(path.basename(project.projectFilePath, sqlprojExtension)), vscode.Uri.file(project.projectFilePath), undefined);
|
||||||
|
|
||||||
this.project = project;
|
this.project = project;
|
||||||
this.fileSystemUri = vscode.Uri.file(project.projectFilePath);
|
this.fileSystemUri = vscode.Uri.file(project.projectFilePath);
|
||||||
this.databaseReferencesNode = new DatabaseReferencesTreeItem(this);
|
this.projectNodeName = path.basename(project.projectFilePath, sqlprojExtension);
|
||||||
this.sqlCmdVariablesNode = new SqlCmdVariablesTreeItem(this);
|
|
||||||
|
this.databaseReferencesNode = new DatabaseReferencesTreeItem(this.projectNodeName, this.sqlprojUri, project.databaseReferences, this);
|
||||||
|
this.sqlCmdVariablesNode = new SqlCmdVariablesTreeItem(this.projectNodeName, this.sqlprojUri, project.sqlCmdVariables, this);
|
||||||
this.construct();
|
this.construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +53,7 @@ export class ProjectRootTreeItem extends BaseProjectTreeItem {
|
|||||||
const projectItem = new vscode.TreeItem(this.fileSystemUri, collapsibleState);
|
const projectItem = new vscode.TreeItem(this.fileSystemUri, collapsibleState);
|
||||||
projectItem.contextValue = this.project.isSdkStyleProject ? DatabaseProjectItemType.project : DatabaseProjectItemType.legacyProject;
|
projectItem.contextValue = this.project.isSdkStyleProject ? DatabaseProjectItemType.project : DatabaseProjectItemType.legacyProject;
|
||||||
projectItem.iconPath = IconPathHelper.databaseProject;
|
projectItem.iconPath = IconPathHelper.databaseProject;
|
||||||
projectItem.label = path.basename(this.relativeProjectUri.fsPath, sqlprojExtension);
|
projectItem.label = this.projectNodeName;
|
||||||
|
|
||||||
return projectItem;
|
return projectItem;
|
||||||
}
|
}
|
||||||
@@ -80,17 +83,17 @@ export class ProjectRootTreeItem extends BaseProjectTreeItem {
|
|||||||
switch (entry.type) {
|
switch (entry.type) {
|
||||||
case EntryType.File:
|
case EntryType.File:
|
||||||
if (entry.sqlObjectType === ExternalStreamingJob) {
|
if (entry.sqlObjectType === ExternalStreamingJob) {
|
||||||
newNode = new fileTree.ExternalStreamingJobFileNode(entry.fsUri, parentNode);
|
newNode = new fileTree.ExternalStreamingJobFileNode(entry.fsUri, this.sqlprojUri, parentNode);
|
||||||
} else if (entry.containsCreateTableStatement) {
|
} else if (entry.containsCreateTableStatement) {
|
||||||
newNode = new fileTree.TableFileNode(entry.fsUri, parentNode);
|
newNode = new fileTree.TableFileNode(entry.fsUri, this.sqlprojUri, parentNode);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newNode = new fileTree.FileNode(entry.fsUri, parentNode);
|
newNode = new fileTree.FileNode(entry.fsUri, this.sqlprojUri, parentNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case EntryType.Folder:
|
case EntryType.Folder:
|
||||||
newNode = new fileTree.FolderNode(entry.fsUri, parentNode);
|
newNode = new fileTree.FolderNode(entry.fsUri, this.sqlprojUri, parentNode);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Error(`Unknown EntryType: '${entry.type}'`);
|
throw new Error(`Unknown EntryType: '${entry.type}'`);
|
||||||
@@ -104,7 +107,7 @@ export class ProjectRootTreeItem extends BaseProjectTreeItem {
|
|||||||
* Gets the immediate parent tree node for an entry in a project file
|
* Gets the immediate parent tree node for an entry in a project file
|
||||||
*/
|
*/
|
||||||
private getEntryParentNode(entry: FileProjectEntry): fileTree.FolderNode | ProjectRootTreeItem {
|
private getEntryParentNode(entry: FileProjectEntry): fileTree.FolderNode | ProjectRootTreeItem {
|
||||||
const relativePathParts = utils.trimChars(utils.trimUri(vscode.Uri.file(this.project.projectFilePath), entry.fsUri), '/').split('/').slice(0, -1); // remove the last part because we only care about the parent
|
const relativePathParts = utils.trimChars(utils.trimUri(this.sqlprojUri, entry.fsUri), '/').split('/').slice(0, -1); // remove the last part because we only care about the parent
|
||||||
|
|
||||||
if (relativePathParts.length === 0) {
|
if (relativePathParts.length === 0) {
|
||||||
return this; // if nothing left after trimming the entry itself, must been root
|
return this; // if nothing left after trimming the entry itself, must been root
|
||||||
@@ -119,7 +122,7 @@ export class ProjectRootTreeItem extends BaseProjectTreeItem {
|
|||||||
for (const part of relativePathParts) {
|
for (const part of relativePathParts) {
|
||||||
if (current.fileChildren[part] === undefined) {
|
if (current.fileChildren[part] === undefined) {
|
||||||
const parentPath = current instanceof ProjectRootTreeItem ? path.dirname(current.fileSystemUri.fsPath) : current.fileSystemUri.fsPath;
|
const parentPath = current instanceof ProjectRootTreeItem ? path.dirname(current.fileSystemUri.fsPath) : current.fileSystemUri.fsPath;
|
||||||
current.fileChildren[part] = new fileTree.FolderNode(vscode.Uri.file(path.join(parentPath, part)), current);
|
current.fileChildren[part] = new fileTree.FolderNode(vscode.Uri.file(path.join(parentPath, part)), this.sqlprojUri, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current.fileChildren[part] instanceof fileTree.FileNode) {
|
if (current.fileChildren[part] instanceof fileTree.FileNode) {
|
||||||
|
|||||||
@@ -15,30 +15,35 @@ import { IconPathHelper } from '../../common/iconHelper';
|
|||||||
* Folder for containing SQLCMD variable nodes in the tree
|
* Folder for containing SQLCMD variable nodes in the tree
|
||||||
*/
|
*/
|
||||||
export class SqlCmdVariablesTreeItem extends BaseProjectTreeItem {
|
export class SqlCmdVariablesTreeItem extends BaseProjectTreeItem {
|
||||||
private sqlcmdVariables: SqlCmdVariableTreeItem[] = [];
|
private sqlcmdVariableTreeItems: SqlCmdVariableTreeItem[] = [];
|
||||||
|
|
||||||
constructor(project: ProjectRootTreeItem) {
|
/**
|
||||||
super(vscode.Uri.file(path.join(project.relativeProjectUri.fsPath, constants.sqlcmdVariablesNodeName)), project);
|
* Constructor
|
||||||
|
* @param projectNodeName Name of the project node. Used for creating the relative path of the SQLCMD Variables node to the project
|
||||||
|
* @param sqlprojUri Full URI to the .sqlproj
|
||||||
|
* @param sqlCmdVariables Collection of SQLCMD variables in the project
|
||||||
|
* @param project
|
||||||
|
*/
|
||||||
|
constructor(projectNodeName: string, sqlprojUri: vscode.Uri, sqlCmdVariables: Record<string, string>, project: ProjectRootTreeItem) {
|
||||||
|
super(vscode.Uri.file(path.join(projectNodeName, constants.sqlcmdVariablesNodeName)), sqlprojUri, project);
|
||||||
|
|
||||||
this.construct();
|
this.construct(sqlCmdVariables);
|
||||||
}
|
}
|
||||||
|
|
||||||
private construct() {
|
private construct(sqlCmdVariables: Record<string, string>) {
|
||||||
const sqlCmdVariables = (this.parent as ProjectRootTreeItem).project.sqlCmdVariables;
|
|
||||||
|
|
||||||
if (!sqlCmdVariables) {
|
if (!sqlCmdVariables) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const sqlCmdVariable of Object.keys(sqlCmdVariables)) {
|
for (const sqlCmdVariable of Object.keys(sqlCmdVariables)) {
|
||||||
if (sqlCmdVariable) {
|
if (sqlCmdVariable) {
|
||||||
this.sqlcmdVariables.push(new SqlCmdVariableTreeItem(sqlCmdVariable, this));
|
this.sqlcmdVariableTreeItems.push(new SqlCmdVariableTreeItem(sqlCmdVariable, this.relativeProjectUri, this.sqlprojUri, this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public get children(): SqlCmdVariableTreeItem[] {
|
public get children(): SqlCmdVariableTreeItem[] {
|
||||||
return this.sqlcmdVariables;
|
return this.sqlcmdVariableTreeItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
public get treeItem(): vscode.TreeItem {
|
public get treeItem(): vscode.TreeItem {
|
||||||
@@ -54,8 +59,8 @@ export class SqlCmdVariablesTreeItem extends BaseProjectTreeItem {
|
|||||||
* Represents a SQLCMD variable in a .sqlproj
|
* Represents a SQLCMD variable in a .sqlproj
|
||||||
*/
|
*/
|
||||||
export class SqlCmdVariableTreeItem extends BaseProjectTreeItem {
|
export class SqlCmdVariableTreeItem extends BaseProjectTreeItem {
|
||||||
constructor(private sqlcmdVar: string, sqlcmdVarsTreeItem: SqlCmdVariablesTreeItem) {
|
constructor(private sqlcmdVar: string, sqlprojUri: vscode.Uri, sqlCmdNodeRelativeProjectUri: vscode.Uri, sqlcmdVarsTreeItem: SqlCmdVariablesTreeItem) {
|
||||||
super(vscode.Uri.file(path.join(sqlcmdVarsTreeItem.relativeProjectUri.fsPath, sqlcmdVar)), sqlcmdVarsTreeItem);
|
super(vscode.Uri.file(path.join(sqlCmdNodeRelativeProjectUri.fsPath, sqlcmdVar)), sqlprojUri, sqlcmdVarsTreeItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public get children(): BaseProjectTreeItem[] {
|
public get children(): BaseProjectTreeItem[] {
|
||||||
|
|||||||
@@ -18,30 +18,31 @@ describe('Project Tree tests', function (): void {
|
|||||||
it('Should correctly order tree nodes by type, then by name', function (): void {
|
it('Should correctly order tree nodes by type, then by name', function (): void {
|
||||||
const root = os.platform() === 'win32' ? 'Z:\\' : '/';
|
const root = os.platform() === 'win32' ? 'Z:\\' : '/';
|
||||||
|
|
||||||
const parent = new ProjectRootTreeItem(new Project(vscode.Uri.file(`${root}Fake.sqlproj`).fsPath));
|
const sqlprojUri = vscode.Uri.file(`${root}Fake.sqlproj`);
|
||||||
|
const parent = new ProjectRootTreeItem(new Project(sqlprojUri.fsPath));
|
||||||
|
|
||||||
let inputNodes: (FileNode | FolderNode)[] = [
|
let inputNodes: (FileNode | FolderNode)[] = [
|
||||||
new FileNode(vscode.Uri.file(`${root}C`), parent),
|
new FileNode(vscode.Uri.file(`${root}C`), sqlprojUri, parent),
|
||||||
new FileNode(vscode.Uri.file(`${root}D`), parent),
|
new FileNode(vscode.Uri.file(`${root}D`), sqlprojUri, parent),
|
||||||
new FolderNode(vscode.Uri.file(`${root}Z`), parent),
|
new FolderNode(vscode.Uri.file(`${root}Z`), sqlprojUri, parent),
|
||||||
new FolderNode(vscode.Uri.file(`${root}X`), parent),
|
new FolderNode(vscode.Uri.file(`${root}X`), sqlprojUri, parent),
|
||||||
new FileNode(vscode.Uri.file(`${root}B`), parent),
|
new FileNode(vscode.Uri.file(`${root}B`), sqlprojUri, parent),
|
||||||
new FileNode(vscode.Uri.file(`${root}A`), parent),
|
new FileNode(vscode.Uri.file(`${root}A`), sqlprojUri, parent),
|
||||||
new FolderNode(vscode.Uri.file(`${root}W`), parent),
|
new FolderNode(vscode.Uri.file(`${root}W`), sqlprojUri, parent),
|
||||||
new FolderNode(vscode.Uri.file(`${root}Y`), parent)
|
new FolderNode(vscode.Uri.file(`${root}Y`), sqlprojUri, parent)
|
||||||
];
|
];
|
||||||
|
|
||||||
inputNodes = inputNodes.sort(sortFileFolderNodes);
|
inputNodes = inputNodes.sort(sortFileFolderNodes);
|
||||||
|
|
||||||
const expectedNodes: (FileNode | FolderNode)[] = [
|
const expectedNodes: (FileNode | FolderNode)[] = [
|
||||||
new FolderNode(vscode.Uri.file(`${root}W`), parent),
|
new FolderNode(vscode.Uri.file(`${root}W`), sqlprojUri, parent),
|
||||||
new FolderNode(vscode.Uri.file(`${root}X`), parent),
|
new FolderNode(vscode.Uri.file(`${root}X`), sqlprojUri, parent),
|
||||||
new FolderNode(vscode.Uri.file(`${root}Y`), parent),
|
new FolderNode(vscode.Uri.file(`${root}Y`), sqlprojUri, parent),
|
||||||
new FolderNode(vscode.Uri.file(`${root}Z`), parent),
|
new FolderNode(vscode.Uri.file(`${root}Z`), sqlprojUri, parent),
|
||||||
new FileNode(vscode.Uri.file(`${root}A`), parent),
|
new FileNode(vscode.Uri.file(`${root}A`), sqlprojUri, parent),
|
||||||
new FileNode(vscode.Uri.file(`${root}B`), parent),
|
new FileNode(vscode.Uri.file(`${root}B`), sqlprojUri, parent),
|
||||||
new FileNode(vscode.Uri.file(`${root}C`), parent),
|
new FileNode(vscode.Uri.file(`${root}C`), sqlprojUri, parent),
|
||||||
new FileNode(vscode.Uri.file(`${root}D`), parent)
|
new FileNode(vscode.Uri.file(`${root}D`), sqlprojUri, parent)
|
||||||
];
|
];
|
||||||
|
|
||||||
should(inputNodes.map(n => n.relativeProjectUri.path)).deepEqual(expectedNodes.map(n => n.relativeProjectUri.path));
|
should(inputNodes.map(n => n.relativeProjectUri.path)).deepEqual(expectedNodes.map(n => n.relativeProjectUri.path));
|
||||||
|
|||||||
Reference in New Issue
Block a user