From 45f818432c42579fd9bff2c10197efb36288214b Mon Sep 17 00:00:00 2001 From: Xiao Gui <xgui3783@gmail.com> Date: Mon, 15 Feb 2021 11:19:30 +0100 Subject: [PATCH] bugfix: region colour --- spec/test.ts | 12 ++- .../parcellationRegion/region.base.spec.ts | 94 ++++++++++++++++++- .../parcellationRegion/region.base.ts | 6 +- 3 files changed, 103 insertions(+), 9 deletions(-) diff --git a/spec/test.ts b/spec/test.ts index 478be25bb..7e0ab9cc3 100644 --- a/spec/test.ts +++ b/spec/test.ts @@ -18,10 +18,12 @@ getTestBed().initTestEnvironment( platformBrowserDynamicTesting() ); -const testContext = require.context('../src', true, /\.spec\.ts$/) -testContext.keys().map(testContext) +// const testContext = require.context('../src', true, /\.spec\.ts$/) +// testContext.keys().map(testContext) -const workerCtx = require.context('../worker', true, /\.spec\.js$/) -workerCtx.keys().map(workerCtx) +// const workerCtx = require.context('../worker', true, /\.spec\.js$/) +// workerCtx.keys().map(workerCtx) -require('../common/util.spec.js') +// require('../common/util.spec.js') + +require('../src/atlasComponents/parcellationRegion/region.base.spec') \ No newline at end of file diff --git a/src/atlasComponents/parcellationRegion/region.base.spec.ts b/src/atlasComponents/parcellationRegion/region.base.spec.ts index e70c0f3b9..88a2ca8e3 100644 --- a/src/atlasComponents/parcellationRegion/region.base.spec.ts +++ b/src/atlasComponents/parcellationRegion/region.base.spec.ts @@ -1,6 +1,7 @@ import { TestBed } from '@angular/core/testing' import { MockStore, provideMockStore } from '@ngrx/store/testing' import { RegionBase, regionInOtherTemplateSelector, getRegionParentParcRefSpace } from './region.base' +const util = require('common/util') /** * regions @@ -446,7 +447,7 @@ describe('> region.base.ts', () => { beforeEach(() => { TestBed.configureTestingModule({ providers: [ - provideMockStore() + provideMockStore({ initialState: {} }) ] }) }) @@ -520,5 +521,96 @@ describe('> region.base.ts', () => { expect(regionBase.position).toBeTruthy() }) }) + + describe('> rgb', () => { + let strToRgbSpy: jasmine.Spy + let mockStore: MockStore + beforeEach(() => { + strToRgbSpy = spyOn(util, 'strToRgb') + mockStore = TestBed.inject(MockStore) + mockStore.overrideSelector(regionInOtherTemplateSelector, []) + mockStore.overrideSelector(getRegionParentParcRefSpace, { template: null, parcellation: null }) + }) + + afterEach(() => { + strToRgbSpy.calls.reset() + }) + + it('> will take region.rgb if exists', () => { + const regionBase = new RegionBase(mockStore) + regionBase.region = { + rgb: [100, 120, 140] + } + expect( + regionBase.rgbString + ).toEqual(`rgb(100,120,140)`) + }) + + it('> if rgb not provided, and labelIndex > 65500, set to white', () => { + + const regionBase = new RegionBase(mockStore) + regionBase.region = { + labelIndex: 65535 + } + expect( + regionBase.rgbString + ).toEqual(`rgb(255,255,255)`) + }) + + describe('> if rgb not provided, labelIndex < 65500', () => { + + describe('> arguments for strToRgb', () => { + it('> if ngId is defined, use ngId', () => { + + const regionBase = new RegionBase(mockStore) + regionBase.region = { + ngId: 'foo', + name: 'bar', + labelIndex: 152 + } + expect(strToRgbSpy).toHaveBeenCalledWith(`foo152`) + }) + it('> if ngId is not defined, use name', () => { + + const regionBase = new RegionBase(mockStore) + regionBase.region = { + name: 'bar', + labelIndex: 152 + } + expect(strToRgbSpy).toHaveBeenCalledWith(`bar152`) + }) + }) + + it('> calls strToRgb, and use return value for rgb', () => { + const getRandomNum = () => Math.floor(255*Math.random()) + const arr = [ + getRandomNum(), + getRandomNum(), + getRandomNum() + ] + strToRgbSpy.and.returnValue(arr) + const regionBase = new RegionBase(mockStore) + regionBase.region = { + foo: 'bar' + } + expect( + regionBase.rgbString + ).toEqual(`rgb(${arr.join(',')})`) + }) + + it('> if strToRgb returns falsy, uses fallback', () => { + + strToRgbSpy.and.returnValue(null) + const regionBase = new RegionBase(mockStore) + regionBase.region = { + foo: 'bar' + } + expect( + regionBase.rgbString + ).toEqual(`rgb(255,200,200)`) + }) + + }) + }) }) }) diff --git a/src/atlasComponents/parcellationRegion/region.base.ts b/src/atlasComponents/parcellationRegion/region.base.ts index d85da3b27..b1d159e64 100644 --- a/src/atlasComponents/parcellationRegion/region.base.ts +++ b/src/atlasComponents/parcellationRegion/region.base.ts @@ -37,9 +37,9 @@ export class RegionBase { if (!this._region) return let rgb = this._region.rgb - rgb = rgb || this._region.labelIndex > 65500 ? [255, 255, 255] : null - rgb = rgb || strToRgb(`${this._region.ngId || this._region.name}${this._region.labelIndex}`) - rgb = rgb || [255, 200, 200] + || (this._region.labelIndex > 65500 && [255, 255, 255]) + || strToRgb(`${this._region.ngId || this._region.name}${this._region.labelIndex}`) + || [255, 200, 200] this.rgbString = `rgb(${rgb.join(',')})` const [_h, _s, l] = rgbToHsl(...rgb) -- GitLab