Skip to content

Commit

Permalink
[INTERNAL] TypeScript: Fix import paths in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
RandomByte committed Aug 28, 2024
1 parent 561dd3e commit 247a2e6
Show file tree
Hide file tree
Showing 74 changed files with 149 additions and 149 deletions.
2 changes: 1 addition & 1 deletion eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export default [
// Add project-specific ESLint config rules here
// in order to override common config
ignores: [
"lib/processors/jsdoc/lib",
"src/processors/jsdoc/lib",
],
},
];
2 changes: 1 addition & 1 deletion test/lib/builder/builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const readFile = promisify(fs.readFile);
import {directoryDeepEqual, findFiles} from "../../utils/fshelper.js";
import sinon from "sinon";
import {graphFromObject, graphFromPackageDependencies} from "@ui5/project/graph";
import * as taskRepository from "../../../lib/tasks/taskRepository.js";
import * as taskRepository from "../../../src/tasks/taskRepository.js";
import {setLogLevel} from "@ui5/logger";

// Using CommonsJS require since JSON module imports are still experimental
Expand Down
2 changes: 1 addition & 1 deletion test/lib/builder/sourceMaps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from "@jridgewell/trace-mapping";
import lineColumn from "line-column";
import {graphFromPackageDependencies} from "@ui5/project/graph";
import * as taskRepository from "../../../lib/tasks/taskRepository.js";
import * as taskRepository from "../../../src/tasks/taskRepository.js";

const applicationURL = new URL("../../fixtures/sourcemaps/test.application/", import.meta.url);
const applicationDestRootURL = new URL("../../tmp/build/sourcemaps/test.application/", import.meta.url);
Expand Down
2 changes: 1 addition & 1 deletion test/lib/lbt/analyzer/ComponentAnalyzer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import test from "ava";
import path from "node:path";
import ComponentAnalyzer from "../../../../lib/lbt/analyzer/ComponentAnalyzer.js";
import ComponentAnalyzer from "../../../../src/lbt/analyzer/ComponentAnalyzer.js";
import sinon from "sinon";

function createMockPool(relPath, manifest) {
Expand Down
6 changes: 3 additions & 3 deletions test/lib/lbt/analyzer/JSModuleAnalyzer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import test from "ava";

import fs from "node:fs";
import path from "node:path";
import {ecmaVersion, parseJS, VisitorKeys} from "../../../../lib/lbt/utils/parseUtils.js";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import JSModuleAnalyzer, {EnrichedVisitorKeys} from "../../../../lib/lbt/analyzer/JSModuleAnalyzer.js";
import {ecmaVersion, parseJS, VisitorKeys} from "../../../../src/lbt/utils/parseUtils.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";
import JSModuleAnalyzer, {EnrichedVisitorKeys} from "../../../../src/lbt/analyzer/JSModuleAnalyzer.js";

const EXPECTED_MODULE_NAME = "sap/ui/testmodule.js";

Expand Down
6 changes: 3 additions & 3 deletions test/lib/lbt/analyzer/SmartTemplateAnalyzer.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import test from "ava";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import {parseJS} from "../../../../lib/lbt/utils/parseUtils.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";
import {parseJS} from "../../../../src/lbt/utils/parseUtils.js";
import sinonGlobal from "sinon";
import esmock from "esmock";

test.beforeEach(async (t) => {
t.context.sinon = sinonGlobal.createSandbox();
t.context.SmartTemplateAnalyzer = await esmock("../../../../lib/lbt/analyzer/SmartTemplateAnalyzer.js");
t.context.SmartTemplateAnalyzer = await esmock("../../../../src/lbt/analyzer/SmartTemplateAnalyzer.js");
});

test.afterEach.always((t) => {
Expand Down
6 changes: 3 additions & 3 deletions test/lib/lbt/analyzer/XMLCompositeAnalyzer.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import test from "ava";
import {parseJS} from "../../../../lib/lbt/utils/parseUtils.js";
import XMLCompositeAnalyzer from "../../../../lib/lbt/analyzer/XMLCompositeAnalyzer.js";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import {parseJS} from "../../../../src/lbt/utils/parseUtils.js";
import XMLCompositeAnalyzer from "../../../../src/lbt/analyzer/XMLCompositeAnalyzer.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";
import sinonGlobal from "sinon";

test.beforeEach((t) => {
Expand Down
10 changes: 5 additions & 5 deletions test/lib/lbt/analyzer/XMLTemplateAnalyzer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import test from "ava";
import XMLTemplateAnalyzer from "../../../../lib/lbt/analyzer/XMLTemplateAnalyzer.js";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import XMLTemplateAnalyzer from "../../../../src/lbt/analyzer/XMLTemplateAnalyzer.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";
import sinon from "sinon";
import esmock from "esmock";

Expand Down Expand Up @@ -64,7 +64,7 @@ test.serial("integration: Analysis of an xml view with core:require from databin
error: errorLogStub,
verbose: sinon.stub(),
};
const XMLTemplateAnalyzerWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/XMLTemplateAnalyzer.js", {
const XMLTemplateAnalyzerWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/XMLTemplateAnalyzer.js", {
"@ui5/logger": {
getLogger: sinon.stub().returns(myLoggerInstance),
},
Expand Down Expand Up @@ -123,7 +123,7 @@ test.serial("integration: Analysis of an xml view with core:require from databin
const myLoggerInstance = {
verbose: verboseLogStub,
};
const XMLTemplateAnalyzerWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/XMLTemplateAnalyzer.js", {
const XMLTemplateAnalyzerWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/XMLTemplateAnalyzer.js", {
"@ui5/logger": {
getLogger: sinon.stub().returns(myLoggerInstance),
},
Expand Down Expand Up @@ -175,7 +175,7 @@ test.serial("integration: Analysis of an xml view with core:require from express
const myLoggerInstance = {
verbose: verboseLogStub,
};
const XMLTemplateAnalyzerWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/XMLTemplateAnalyzer.js", {
const XMLTemplateAnalyzerWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/XMLTemplateAnalyzer.js", {
"@ui5/logger": {
getLogger: sinon.stub().returns(myLoggerInstance),
},
Expand Down
14 changes: 7 additions & 7 deletions test/lib/lbt/analyzer/analyzeLibraryJS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ sap.ui.define([

const librayJSPath = "library/test/library.js";
const errorLogStub = sinon.stub();
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/analyzeLibraryJS.js", {
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/analyzeLibraryJS.js", {
"@ui5/logger": {
getLogger: () => ({
error: errorLogStub,
Expand Down Expand Up @@ -105,7 +105,7 @@ sap.ui.define([

const librayJSPath = "library/test/library.js";
const errorLogStub = sinon.stub();
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/analyzeLibraryJS", {
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/analyzeLibraryJS", {
"@ui5/logger": {
getLogger: () => ({
error: errorLogStub,
Expand Down Expand Up @@ -140,7 +140,7 @@ sap.ui.define([

const librayJSPath = "library/test/library.js";
const errorLogStub = sinon.stub();
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/analyzeLibraryJS", {
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/analyzeLibraryJS", {
"@ui5/logger": {
getLogger: () => ({
error: errorLogStub,
Expand Down Expand Up @@ -177,7 +177,7 @@ sap.ui.define([
const librayName = "library.js";
const librayJSPath = "library/test/library.js";
const errorLogStub = sinon.stub();
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/analyzeLibraryJS", {
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/analyzeLibraryJS", {
"@ui5/logger": {
getLogger: () => ({
error: errorLogStub,
Expand Down Expand Up @@ -232,7 +232,7 @@ sap.ui.define([
const librayName = "library.js";
const librayJSPath = "library/test/library.js";
const errorLogStub = sinon.stub();
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/analyzeLibraryJS", {
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/analyzeLibraryJS", {
"@ui5/logger": {
getLogger: () => ({
error: errorLogStub,
Expand Down Expand Up @@ -290,7 +290,7 @@ sap.ui.define([

const librayJSPath = "library/test/library.js";
const errorLogStub = sinon.stub();
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/analyzeLibraryJS.js", {
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/analyzeLibraryJS.js", {
"@ui5/logger": {
getLogger: () => ({
error: errorLogStub,
Expand Down Expand Up @@ -347,7 +347,7 @@ sap.ui.define([

const librayJSPath = "library/test/library.js";
const errorLogStub = sinon.stub();
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../lib/lbt/analyzer/analyzeLibraryJS.js", {
const analyzeLibraryJSWithStubbedLogger = await esmock("../../../../src/lbt/analyzer/analyzeLibraryJS.js", {
"@ui5/logger": {
getLogger: () => ({
error: errorLogStub,
Expand Down
6 changes: 3 additions & 3 deletions test/lib/lbt/bundle/AutoSplitter.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import test from "ava";
import sinon from "sinon";
import {pd} from "pretty-data";
import BundleResolver from "../../../../lib/lbt/bundle/Resolver.js";
import AutoSplitter from "../../../../lib/lbt/bundle/AutoSplitter.js";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import BundleResolver from "../../../../src/lbt/bundle/Resolver.js";
import AutoSplitter from "../../../../src/lbt/bundle/AutoSplitter.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";

function createMockPool(dependencies) {
return {
Expand Down
14 changes: 7 additions & 7 deletions test/lib/lbt/bundle/Builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import test from "ava";

import sinon from "sinon";
import esmock from "esmock";
import Builder from "../../../../lib/lbt/bundle/Builder.js";
import {__localFunctions__} from "../../../../lib/lbt/bundle/Builder.js";
import ResourcePool from "../../../../lib/lbt/resources/ResourcePool.js";
import Builder from "../../../../src/lbt/bundle/Builder.js";
import {__localFunctions__} from "../../../../src/lbt/bundle/Builder.js";
import ResourcePool from "../../../../src/lbt/resources/ResourcePool.js";

// Node.js itself tries to parse sourceMappingURLs in all JavaScript files. This is unwanted and might even lead to
// obscure errors when dynamically generating Data-URI soruceMappingURL values.
Expand All @@ -23,7 +23,7 @@ test.beforeEach(async (t) => {
error: t.context.errorLogStub,
};

t.context.BuilderWithStub = await esmock("../../../../lib/lbt/bundle/Builder", {
t.context.BuilderWithStub = await esmock("../../../../src/lbt/bundle/Builder", {
"@ui5/logger": {
getLogger: () => myLoggerInstance,
},
Expand Down Expand Up @@ -1231,7 +1231,7 @@ test.serial("integration(legacy): createBundle with bundleInfo with requiresTopL
warn: warnLogStub,
error: errorLogStub,
};
const BuilderWithStub = await esmock("../../../../lib/lbt/bundle/Builder", {
const BuilderWithStub = await esmock("../../../../src/lbt/bundle/Builder", {
"@ui5/logger": {
getLogger: () => myLoggerInstance,
},
Expand Down Expand Up @@ -1359,7 +1359,7 @@ test.serial("integration: createBundle with bundleInfo", async (t) => {
warn: warnLogStub,
error: errorLogStub,
};
const BuilderWithStub = await esmock("../../../../lib/lbt/bundle/Builder", {
const BuilderWithStub = await esmock("../../../../src/lbt/bundle/Builder", {
"@ui5/logger": {
getLogger: () => myLoggerInstance,
},
Expand Down Expand Up @@ -3147,7 +3147,7 @@ test.serial("getUi5MajorVersion with cache", async (t) => {
});

const mySemverValidStub = sinon.stub().returns(true);
const BuilderWithSemverStub = await esmock("../../../../lib/lbt/bundle/Builder", {
const BuilderWithSemverStub = await esmock("../../../../src/lbt/bundle/Builder", {
semver: {
valid: mySemverValidStub,
},
Expand Down
2 changes: 1 addition & 1 deletion test/lib/lbt/bundle/BundleWriter.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import test from "ava";
import BundleWriter from "../../../../lib/lbt/bundle/BundleWriter.js";
import BundleWriter from "../../../../src/lbt/bundle/BundleWriter.js";

test("Constructor", (t) => {
const w = new BundleWriter();
Expand Down
6 changes: 3 additions & 3 deletions test/lib/lbt/bundle/Resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import test from "ava";
import sinon from "sinon";
import esmock from "esmock";

import Resolver from "../../../../lib/lbt/bundle/Resolver.js";
import ResourcePool from "../../../../lib/lbt/resources/ResourcePool.js";
import Resolver from "../../../../src/lbt/bundle/Resolver.js";
import ResourcePool from "../../../../src/lbt/resources/ResourcePool.js";

const sortedCopy = (array) => array.slice().sort();

Expand Down Expand Up @@ -239,7 +239,7 @@ test.serial("no errors for dependencies between non-decomposable bundles", async
silly: sinon.stub(),
verbose: sinon.stub(),
};
const ResolverWithStub = await esmock("../../../../lib/lbt/bundle/Resolver", {
const ResolverWithStub = await esmock("../../../../src/lbt/bundle/Resolver", {
"@ui5/logger": {
getLogger: () => myLoggerInstance,
},
Expand Down
6 changes: 3 additions & 3 deletions test/lib/lbt/calls/SapUiDefine.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import test from "ava";
import {parseJS, Syntax} from "../../../../lib/lbt/utils/parseUtils.js";
import SapUiDefineCall from "../../../../lib/lbt/calls/SapUiDefine.js";
import {parseJS, Syntax} from "../../../../src/lbt/utils/parseUtils.js";
import SapUiDefineCall from "../../../../src/lbt/calls/SapUiDefine.js";
import sinonGlobal from "sinon";
import esmock from "esmock";

Expand All @@ -12,7 +12,7 @@ function parse(code) {
async function setupSapUiDefineCallWithStubbedLogger({context}) {
const {sinon} = context;
context.warningLogSpy = sinon.spy();
context.SapUiDefineCallWithStubbedLogger = await esmock("../../../../lib/lbt/calls/SapUiDefine.js", {
context.SapUiDefineCallWithStubbedLogger = await esmock("../../../../src/lbt/calls/SapUiDefine.js", {
"@ui5/logger": {
getLogger: {
warn: context.warningLogSpy,
Expand Down
4 changes: 2 additions & 2 deletions test/lib/lbt/graph/dependencyGraph.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import test from "ava";
import dependencyGraph from "../../../../lib/lbt/graph/dependencyGraph.js";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import dependencyGraph from "../../../../src/lbt/graph/dependencyGraph.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";

function createMockPool(dependencyMapping) {
return {
Expand Down
6 changes: 3 additions & 3 deletions test/lib/lbt/graph/dominatorTree.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import test from "ava";
import dominatorTree from "../../../../lib/lbt/graph/dominatorTree.js";
import dependencyGraph from "../../../../lib/lbt/graph/dependencyGraph.js";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import dominatorTree from "../../../../src/lbt/graph/dominatorTree.js";
import dependencyGraph from "../../../../src/lbt/graph/dependencyGraph.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";

function createMockPool(dependencyMapping) {
return {
Expand Down
4 changes: 2 additions & 2 deletions test/lib/lbt/graph/topologicalSort.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import test from "ava";
import topologicalSort from "../../../../lib/lbt/graph/topologicalSort.js";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import topologicalSort from "../../../../src/lbt/graph/topologicalSort.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";

function createMockPool(dependencyMapping) {
return {
Expand Down
2 changes: 1 addition & 1 deletion test/lib/lbt/resources/LibraryFileAnalyzer.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import test from "ava";
import {getDependencyInfos} from "../../../../lib/lbt/resources/LibraryFileAnalyzer.js";
import {getDependencyInfos} from "../../../../src/lbt/resources/LibraryFileAnalyzer.js";

test("extract packaging info from .library file", (t) => {
const libraryFile = `\
Expand Down
2 changes: 1 addition & 1 deletion test/lib/lbt/resources/LocatorResourcePool.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import test from "ava";
import LocatorResourcePool from "../../../../lib/lbt/resources/LocatorResourcePool.js";
import LocatorResourcePool from "../../../../src/lbt/resources/LocatorResourcePool.js";
import Resource from "@ui5/fs/Resource";

test("getIgnoreMissingModules", (t) => {
Expand Down
2 changes: 1 addition & 1 deletion test/lib/lbt/resources/ModuleInfo.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import test from "ava";
import ModuleInfo from "../../../../lib/lbt/resources/ModuleInfo.js";
import ModuleInfo from "../../../../src/lbt/resources/ModuleInfo.js";

test("ModuleInfo: constructor", (t) => {
const moduleInfo = new ModuleInfo("myName");
Expand Down
8 changes: 4 additions & 4 deletions test/lib/lbt/resources/Resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import esmock from "esmock";
test.serial("Resource: buffer", async (t) => {
const readFileStub = sinon.stub().callsArgWith(1, null, Buffer.from("content"));

const Resource = await esmock("../../../../lib/lbt/resources/Resource.js", {
const Resource = await esmock("../../../../src/lbt/resources/Resource.js", {
"graceful-fs": {
readFile: readFileStub,
},
Expand All @@ -21,7 +21,7 @@ test.serial("Resource: buffer", async (t) => {

test.serial("Resource: string", async (t) => {
const readFileStub = sinon.stub().callsArgWith(1, null, Buffer.from("content"));
const Resource = await esmock("../../../../lib/lbt/resources/Resource.js", {
const Resource = await esmock("../../../../src/lbt/resources/Resource.js", {
"graceful-fs": {
readFile: readFileStub,
},
Expand All @@ -36,13 +36,13 @@ test.serial("Resource: string", async (t) => {
});

test.serial("Resource: constructor", async (t) => {
const Resource = await esmock("../../../../lib/lbt/resources/Resource.js"); // Import unmocked
const Resource = await esmock("../../../../src/lbt/resources/Resource.js"); // Import unmocked
const resource = new Resource({}, "name", "file");
t.is(resource.fileSize, -1, "called once");
});

test.serial("Resource: constructor with stat", async (t) => {
const Resource = await esmock("../../../../lib/lbt/resources/Resource.js"); // Import unmocked
const Resource = await esmock("../../../../src/lbt/resources/Resource.js"); // Import unmocked
const resource = new Resource({}, "name", "file", {size: 47});
t.is(resource.fileSize, 47, "called once");
});
4 changes: 2 additions & 2 deletions test/lib/lbt/resources/ResourceCollector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import test from "ava";
import sinon from "sinon";
import esmock from "esmock";
import Resource from "@ui5/fs/Resource";
import LocatorResourcePool from "../../../../lib/lbt/resources/LocatorResourcePool.js";
import LocatorResourcePool from "../../../../src/lbt/resources/LocatorResourcePool.js";

test.beforeEach(async (t) => {
t.context.logWarnSpy = sinon.spy();
t.context.logVerboseSpy = sinon.spy();

t.context.ResourceCollector = await esmock("../../../../lib/lbt/resources/ResourceCollector.js", {
t.context.ResourceCollector = await esmock("../../../../src/lbt/resources/ResourceCollector.js", {
"@ui5/logger": {
getLogger: sinon.stub().withArgs("lbt:resources:ResourceCollector").returns({
warn: t.context.logWarnSpy,
Expand Down
2 changes: 1 addition & 1 deletion test/lib/lbt/resources/ResourceFilterList.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import test from "ava";
import ResourceFilterList, {negateFilters} from "../../../../lib/lbt/resources/ResourceFilterList.js";
import ResourceFilterList, {negateFilters} from "../../../../src/lbt/resources/ResourceFilterList.js";

test("single string matcher", (t) => {
const filterList = new ResourceFilterList([
Expand Down
2 changes: 1 addition & 1 deletion test/lib/lbt/resources/ResourceInfo.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import test from "ava";
import ResourceInfo from "../../../../lib/lbt/resources/ResourceInfo.js";
import ResourceInfo from "../../../../src/lbt/resources/ResourceInfo.js";

test("ResourceInfo: constructor", (t) => {
const resourceInfo = new ResourceInfo("myName");
Expand Down
Loading

0 comments on commit 247a2e6

Please sign in to comment.