diff --git a/DebuggingSpy-Browser-Tests/DSRecordBrowserPresenterTest.class.st b/DebuggingSpy-Browser-Tests/DSRecordBrowserPresenterTest.class.st index 7e65221..cd701a2 100644 --- a/DebuggingSpy-Browser-Tests/DSRecordBrowserPresenterTest.class.st +++ b/DebuggingSpy-Browser-Tests/DSRecordBrowserPresenterTest.class.st @@ -16,10 +16,15 @@ DSRecordBrowserPresenterTest >> filesPresenter [ { #category : 'helpers' } DSRecordBrowserPresenterTest >> generateRecordsFile [ + + ^ self generateRecordsFileFor: self getRecordExamples +] + +{ #category : 'helpers' } +DSRecordBrowserPresenterTest >> generateRecordsFileFor: someRecords [ "Generates a file of records and returns its file reference." - | records recordFileRef writeStream | - records := self getRecordExamples. + | recordFileRef writeStream | recordFileRef := self temporaryDirectory / ('ds-spy-test-' , UUID new asString). recordFileRef ensureCreateFile. @@ -27,10 +32,10 @@ DSRecordBrowserPresenterTest >> generateRecordsFile [ writeStream nextPut: $[. - records doWithIndex: [ :record :index | + someRecords doWithIndex: [ :record :index | writeStream nextPutAll: (STON toString: record). - index = records size ifFalse: [ + index = someRecords size ifFalse: [ writeStream nextPut: $,. writeStream crlf ] ]. @@ -83,6 +88,12 @@ DSRecordBrowserPresenterTest >> setUp [ browser := DSRecordBrowserPresenter new ] +{ #category : 'helpers' } +DSRecordBrowserPresenterTest >> statisticsPresenter [ + + ^ browser presenterAt: #statisticsPresenter +] + { #category : 'running' } DSRecordBrowserPresenterTest >> tearDown [ @@ -153,15 +164,18 @@ DSRecordBrowserPresenterTest >> testColorAssociations [ | associations | associations := { ((Color fromHexString: '#1f48ff') -> 'Browser'). - ((Color fromHexString: '#ff0fef') -> 'Debug point browser'). + ((Color fromHexString: '#772980') -> 'Debug point browser'). ((Color fromHexString: '#345e54') -> 'Epicea'). ((Color fromHexString: '#00e5ff') -> 'Iceberg'). - ((Color fromHexString: '#ff8f1f') -> 'Critique browser'). + ((Color fromHexString: '#ff9100') -> 'Critique browser'). ((Color fromHexString: '#ff2200') -> 'Debugger'). ((Color fromHexString: '#fad314') -> 'Inspector'). ((Color fromHexString: '#70B77E') -> 'Playground'). - ((Color fromHexString: '#292929') -> 'Rewriter') }. + ((Color fromHexString: '#ffffff') -> 'Rewriter'). + ((Color fromHexString: '#ec45ff') -> 'Debugging Spy'). + ((Color fromHexString: '#b3b3b3') -> 'Unknown window') }. + self assert: associations size equals: DSRecordBrowserPresenter colorAssociations size. self assert: (associations allSatisfy: [ :asso | DSRecordBrowserPresenter colorAssociations includes: asso ]) ] @@ -215,7 +229,8 @@ DSRecordBrowserPresenterTest >> testGetHistoryFrom [ | fileRef | fileRef := self generateRecordsFile. - self assert: (browser getHistoryFrom: fileRef) class equals: DSRecordHistory + self assert: (browser getHistoryFrom: fileRef) class equals: DSRecordHistory. + self assert: (browser getHistoryFrom: nil) isNil ] { #category : 'tests' } @@ -332,10 +347,10 @@ DSRecordBrowserPresenterTest >> testUpdateLastRecord [ { #category : 'tests' } DSRecordBrowserPresenterTest >> testUpdateRecordsTable [ - | fileRef presenterMock | + | fileRef | fileRef := self generateRecordsFile. - presenterMock := MockObject new on: #selectedItem respond: fileRef. - browser updateRecordsTable: presenterMock. + browser selectedHistory: (browser getHistoryFrom: fileRef). + browser updateRecordsTable. self assert: self recordsTablePresenter roots first key class equals: DSBrowseRecord. self assert: (self recordsTablePresenter roots at: 2) key class equals: DSMouseEnterWindowRecord. @@ -354,6 +369,39 @@ DSRecordBrowserPresenterTest >> testUpdateRecordsTableWhenAddingFile [ self assert: self recordsTablePresenter roots last key class equals: DSInspectItRecord ] +{ #category : 'tests' } +DSRecordBrowserPresenterTest >> testUpdateStatisticsPresenter [ + + | children | + self assert: browser updateStatisticsPresenter equals: browser. + + browser selectedHistory: (browser getHistoryFrom: self generateRecordsFile). + browser updateStatisticsPresenter. + + children := self statisticsPresenter children. + self assert: children size equals: 5. + + self assert: children keys first label equals: 'Number of events: 4'. + self assert: children keys second label equals: 'Number of windows: 4'. + self assert: children keys third label equals: 'Time taken: 00:00:03'. + self assert: children keys fourth label equals: 'Idle time: 00:00:00'. + self assert: children keys last label equals: 'Absolute time taken: 00:00:03' +] + +{ #category : 'tests' } +DSRecordBrowserPresenterTest >> testUpdateWindowsPresenter [ + + | records fileRef windows | + records := self getRecordExamples. + fileRef := self generateRecordsFileFor: records. + browser selectedHistory: (browser getHistoryFrom: fileRef). + browser updateWindowsPresenter. + + windows := self windowsPresenter roots. + self assert: windows size equals: 4. + self assert: (windows allSatisfy: [ :window | window class = DSWindowRecord ]) +] + { #category : 'tests' } DSRecordBrowserPresenterTest >> testWindowColorFrom [ @@ -368,3 +416,9 @@ DSRecordBrowserPresenterTest >> timelinePresenter [ ^ browser presenterAt: #graphicTimeline ] + +{ #category : 'helpers' } +DSRecordBrowserPresenterTest >> windowsPresenter [ + + ^ browser presenterAt: #windowsPresenter +] diff --git a/DebuggingSpy-Browser/DSAbstractEventRecord.extension.st b/DebuggingSpy-Browser/DSAbstractEventRecord.extension.st index 5696c56..471e082 100644 --- a/DebuggingSpy-Browser/DSAbstractEventRecord.extension.st +++ b/DebuggingSpy-Browser/DSAbstractEventRecord.extension.st @@ -15,3 +15,31 @@ DSAbstractEventRecord class >> getLeafSubClasses [ ^ classes ] + +{ #category : '*DebuggingSpy-Browser' } +DSAbstractEventRecord >> printAsFormattedTime [ + "Returns the specified date and time as a string of format hh:mm:ss.nnnnnnnnn" + + ^ (String new: 18 streamContents: [ :aStream | dateTime asTime print24: true showSeconds: true on: aStream ]) asText allBold +] + +{ #category : '*DebuggingSpy-Browser' } +DSAbstractEventRecord >> type [ + "Returns the record's type to be displayed in the windows presenter." + + ^ self class name +] + +{ #category : '*DebuggingSpy-Browser' } +DSAbstractEventRecord >> window [ + "Returns the record's window from the browser selected history." + + ^ DSRecordBrowserPresenter uniqueInstance getWindowFromRecord: self +] + +{ #category : '*DebuggingSpy-Browser' } +DSAbstractEventRecord >> windowColor [ + "Returns the record's window color." + + ^ self window windowColor +] diff --git a/DebuggingSpy-Browser/DSRecordBrowserPresenter.class.st b/DebuggingSpy-Browser/DSRecordBrowserPresenter.class.st index ac5a71a..9e34ca9 100644 --- a/DebuggingSpy-Browser/DSRecordBrowserPresenter.class.st +++ b/DebuggingSpy-Browser/DSRecordBrowserPresenter.class.st @@ -11,12 +11,14 @@ Class { 'files', 'recordsTablePresenter', 'timerWindow', - 'graphicTimeline', 'recordsFilter', 'toolbarPresenter', 'fileListPresenter', 'startRecordButtonPresenter', - 'stopRecordButtonPresenter' + 'stopRecordButtonPresenter', + 'windowsPresenter', + 'statisticsPresenter', + 'selectedHistory' ], #classInstVars : [ 'uniqueInstance' @@ -37,7 +39,7 @@ DSRecordBrowserPresenter class >> colorAssociations [ ] { #category : 'accessing' } -DSRecordBrowserPresenter class >> defaultExtent [ +DSRecordBrowserPresenter class >> defaultPreferredExtent [ ^ 1000 @ 600 ] @@ -72,6 +74,7 @@ DSRecordBrowserPresenter class >> resetBrowser [ DSRecordBrowserPresenter class >> toggleBrowser [ "Opens the browser or closes it depending on its state. If it needs to be created, then creates and opens it." +