@flighthq/keyboard 0.3.1-next.975.01aea94 → 0.4.0-edge.1908.751021c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keyboard.d.ts +5 -1
- package/dist/keyboard.d.ts.map +1 -1
- package/dist/keyboard.js +57 -7
- package/dist/keyboard.js.map +1 -1
- package/package.json +3 -3
- package/src/keyboard.test.ts +81 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { attachSoftKeyboard, createSoftKeyboard, createSoftKeyboardTransition, detachSoftKeyboard, disposeSoftKeyboard, getSoftKeyboardHeight, getSoftKeyboardInfo, getSoftKeyboardResizeMode, hideSoftKeyboard, isSoftKeyboardAccessoryBarVisible, isSoftKeyboardScrollAssistEnabled, setSoftKeyboardAccessoryBarVisible, setSoftKeyboardResizeMode, setSoftKeyboardScrollAssistEnabled, setSoftKeyboardStyle, showSoftKeyboard, } from './contract';
|
|
1
|
+
export { explainSoftKeyboardBackend, attachSoftKeyboard, createSoftKeyboard, createSoftKeyboardTransition, detachSoftKeyboard, disposeSoftKeyboard, getSoftKeyboardHeight, getSoftKeyboardInfo, getSoftKeyboardResizeMode, hideSoftKeyboard, isSoftKeyboardAccessoryBarVisible, isSoftKeyboardScrollAssistEnabled, setSoftKeyboardAccessoryBarVisible, setSoftKeyboardResizeMode, setSoftKeyboardScrollAssistEnabled, setSoftKeyboardStyle, showSoftKeyboard, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,iCAAiC,EACjC,iCAAiC,EACjC,kCAAkC,EAClC,yBAAyB,EACzB,kCAAkC,EAClC,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,iCAAiC,EACjC,iCAAiC,EACjC,kCAAkC,EAClC,yBAAyB,EACzB,kCAAkC,EAClC,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { attachSoftKeyboard, createSoftKeyboard, createSoftKeyboardTransition, detachSoftKeyboard, disposeSoftKeyboard, getSoftKeyboardHeight, getSoftKeyboardInfo, getSoftKeyboardResizeMode, hideSoftKeyboard, isSoftKeyboardAccessoryBarVisible, isSoftKeyboardScrollAssistEnabled, setSoftKeyboardAccessoryBarVisible, setSoftKeyboardResizeMode, setSoftKeyboardScrollAssistEnabled, setSoftKeyboardStyle, showSoftKeyboard, } from './contract';
|
|
1
|
+
export { explainSoftKeyboardBackend, attachSoftKeyboard, createSoftKeyboard, createSoftKeyboardTransition, detachSoftKeyboard, disposeSoftKeyboard, getSoftKeyboardHeight, getSoftKeyboardInfo, getSoftKeyboardResizeMode, hideSoftKeyboard, isSoftKeyboardAccessoryBarVisible, isSoftKeyboardScrollAssistEnabled, setSoftKeyboardAccessoryBarVisible, setSoftKeyboardResizeMode, setSoftKeyboardScrollAssistEnabled, setSoftKeyboardStyle, showSoftKeyboard, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,iCAAiC,EACjC,iCAAiC,EACjC,kCAAkC,EAClC,yBAAyB,EACzB,kCAAkC,EAClC,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,iCAAiC,EACjC,iCAAiC,EACjC,kCAAkC,EAClC,yBAAyB,EACzB,kCAAkC,EAClC,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
package/dist/keyboard.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SoftKeyboard, SoftKeyboardBackend, SoftKeyboardInfo, SoftKeyboardResizeMode, SoftKeyboardStyleKind, SoftKeyboardTransition } from '@flighthq/types/contract';
|
|
1
|
+
import type { BackendExplanation, SoftKeyboard, SoftKeyboardBackend, SoftKeyboardInfo, SoftKeyboardResizeMode, SoftKeyboardStyleKind, SoftKeyboardTransition } from '@flighthq/types/contract';
|
|
2
2
|
export declare function attachSoftKeyboard(keyboard: SoftKeyboard): void;
|
|
3
3
|
export declare function createSoftKeyboard(): SoftKeyboard;
|
|
4
4
|
export declare function createSoftKeyboardInfo(): SoftKeyboardInfo;
|
|
@@ -6,13 +6,17 @@ export declare function createSoftKeyboardTransition(): SoftKeyboardTransition;
|
|
|
6
6
|
export declare function createWebSoftKeyboardBackend(): SoftKeyboardBackend;
|
|
7
7
|
export declare function detachSoftKeyboard(keyboard: SoftKeyboard): void;
|
|
8
8
|
export declare function disposeSoftKeyboard(keyboard: SoftKeyboard): void;
|
|
9
|
+
export declare function explainSoftKeyboardBackend(): BackendExplanation;
|
|
9
10
|
export declare function getSoftKeyboardBackend(): SoftKeyboardBackend;
|
|
10
11
|
export declare function getSoftKeyboardHeight(): number;
|
|
11
12
|
export declare function getSoftKeyboardInfo(out: SoftKeyboardInfo): SoftKeyboardInfo;
|
|
12
13
|
export declare function getSoftKeyboardResizeMode(): SoftKeyboardResizeMode;
|
|
13
14
|
export declare function hideSoftKeyboard(): void;
|
|
15
|
+
export declare function installSoftKeyboardHostBackend(backend: SoftKeyboardBackend): void;
|
|
14
16
|
export declare function isSoftKeyboardAccessoryBarVisible(): boolean;
|
|
15
17
|
export declare function isSoftKeyboardScrollAssistEnabled(): boolean;
|
|
18
|
+
export declare function observeSoftKeyboardHostResult(operation: string, succeeded: boolean): void;
|
|
19
|
+
export declare function resetSoftKeyboardBackendForTest(): void;
|
|
16
20
|
export declare function setSoftKeyboardAccessoryBarVisible(visible: boolean): void;
|
|
17
21
|
export declare function setSoftKeyboardBackend(backend: SoftKeyboardBackend | null): void;
|
|
18
22
|
export declare function setSoftKeyboardResizeMode(mode: SoftKeyboardResizeMode): void;
|
package/dist/keyboard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAkC/D;AAGD,wBAAgB,kBAAkB,IAAI,YAAY,CAYjD;AAGD,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAGD,wBAAgB,4BAA4B,IAAI,sBAAsB,CAErE;AAQD,wBAAgB,4BAA4B,IAAI,mBAAmB,CAkDlE;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAM/D;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAEhE;AAGD,wBAAgB,sBAAsB,IAAI,mBAAmB,
|
|
1
|
+
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAkC/D;AAGD,wBAAgB,kBAAkB,IAAI,YAAY,CAYjD;AAGD,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAGD,wBAAgB,4BAA4B,IAAI,sBAAsB,CAErE;AAQD,wBAAgB,4BAA4B,IAAI,mBAAmB,CAkDlE;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAM/D;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAEhE;AAED,wBAAgB,0BAA0B,IAAI,kBAAkB,CAa/D;AAGD,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AAGD,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAGD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,gBAAgB,CAE3E;AAID,wBAAgB,yBAAyB,IAAI,sBAAsB,CAGlE;AAID,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAMjF;AAID,wBAAgB,iCAAiC,IAAI,OAAO,CAE3D;AAGD,wBAAgB,iCAAiC,IAAI,OAAO,CAE3D;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAKzF;AAED,wBAAgB,+BAA+B,IAAI,IAAI,CAKtD;AAID,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEzE;AAGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAEhF;AAID,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAE5E;AAID,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEzE;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAEvE;AAID,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
package/dist/keyboard.js
CHANGED
|
@@ -138,11 +138,23 @@ export function detachSoftKeyboard(keyboard) {
|
|
|
138
138
|
export function disposeSoftKeyboard(keyboard) {
|
|
139
139
|
detachSoftKeyboard(keyboard);
|
|
140
140
|
}
|
|
141
|
-
|
|
141
|
+
export function explainSoftKeyboardBackend() {
|
|
142
|
+
if (_custom !== null) {
|
|
143
|
+
return { conflict: _hostConflict, layer: 'custom', operation: null, viability: 'unobserved' };
|
|
144
|
+
}
|
|
145
|
+
if (_host !== null) {
|
|
146
|
+
return {
|
|
147
|
+
conflict: _hostConflict,
|
|
148
|
+
layer: 'host',
|
|
149
|
+
operation: _hostObservation !== null ? _hostObservation.operation : null,
|
|
150
|
+
viability: _hostObservation !== null ? _hostObservation.viability : 'unobserved',
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return { conflict: false, layer: 'host-not-enabled', operation: null, viability: 'unobserved' };
|
|
154
|
+
}
|
|
155
|
+
// The active soft keyboard backend. Precedence: custom > host > sentinel.
|
|
142
156
|
export function getSoftKeyboardBackend() {
|
|
143
|
-
|
|
144
|
-
_backend = createWebSoftKeyboardBackend();
|
|
145
|
-
return _backend;
|
|
157
|
+
return _custom ?? _host ?? _sentinel;
|
|
146
158
|
}
|
|
147
159
|
// Returns the current on-screen keyboard height in CSS pixels without allocating. 0 when hidden.
|
|
148
160
|
export function getSoftKeyboardHeight() {
|
|
@@ -163,6 +175,14 @@ export function getSoftKeyboardResizeMode() {
|
|
|
163
175
|
export function hideSoftKeyboard() {
|
|
164
176
|
getSoftKeyboardBackend().hide();
|
|
165
177
|
}
|
|
178
|
+
export function installSoftKeyboardHostBackend(backend) {
|
|
179
|
+
if (_host !== null) {
|
|
180
|
+
if (_host !== backend)
|
|
181
|
+
_hostConflict = true;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
_host = backend;
|
|
185
|
+
}
|
|
166
186
|
// Returns whether the input accessory bar (iOS toolbar above the keyboard) is visible.
|
|
167
187
|
// Returns false when the backend does not support this query.
|
|
168
188
|
export function isSoftKeyboardAccessoryBarVisible() {
|
|
@@ -172,14 +192,26 @@ export function isSoftKeyboardAccessoryBarVisible() {
|
|
|
172
192
|
export function isSoftKeyboardScrollAssistEnabled() {
|
|
173
193
|
return getSoftKeyboardBackend().getScrollAssistEnabled?.() ?? false;
|
|
174
194
|
}
|
|
195
|
+
export function observeSoftKeyboardHostResult(operation, succeeded) {
|
|
196
|
+
_hostObservation = {
|
|
197
|
+
operation,
|
|
198
|
+
viability: succeeded ? 'available' : 'runtime-api-unavailable',
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
export function resetSoftKeyboardBackendForTest() {
|
|
202
|
+
_custom = null;
|
|
203
|
+
_host = null;
|
|
204
|
+
_hostConflict = false;
|
|
205
|
+
_hostObservation = null;
|
|
206
|
+
}
|
|
175
207
|
// Controls whether the iOS input accessory bar (the toolbar above the keyboard) is visible.
|
|
176
208
|
// No-op when the backend does not support this.
|
|
177
209
|
export function setSoftKeyboardAccessoryBarVisible(visible) {
|
|
178
210
|
getSoftKeyboardBackend().setAccessoryBarVisible?.(visible);
|
|
179
211
|
}
|
|
180
|
-
// Installs a
|
|
212
|
+
// Installs a custom soft keyboard backend; takes precedence over the host backend.
|
|
181
213
|
export function setSoftKeyboardBackend(backend) {
|
|
182
|
-
|
|
214
|
+
_custom = backend;
|
|
183
215
|
}
|
|
184
216
|
// Controls keyboard resize behavior — how the app viewport reacts when the keyboard appears.
|
|
185
217
|
// No-op when the backend does not support resize-mode control.
|
|
@@ -201,7 +233,25 @@ export function setSoftKeyboardStyle(style) {
|
|
|
201
233
|
export function showSoftKeyboard() {
|
|
202
234
|
getSoftKeyboardBackend().show();
|
|
203
235
|
}
|
|
204
|
-
let
|
|
236
|
+
let _custom = null;
|
|
237
|
+
let _host = null;
|
|
238
|
+
let _hostConflict = false;
|
|
239
|
+
let _hostObservation = null;
|
|
240
|
+
const _sentinel = {
|
|
241
|
+
getInfo(out) {
|
|
242
|
+
out.visible = false;
|
|
243
|
+
out.height = 0;
|
|
244
|
+
out.x = 0;
|
|
245
|
+
out.y = 0;
|
|
246
|
+
out.width = 0;
|
|
247
|
+
return out;
|
|
248
|
+
},
|
|
249
|
+
subscribe() {
|
|
250
|
+
return () => { };
|
|
251
|
+
},
|
|
252
|
+
show() { },
|
|
253
|
+
hide() { },
|
|
254
|
+
};
|
|
205
255
|
const _scratch = createSoftKeyboardInfo();
|
|
206
256
|
const _subscriptions = new WeakMap();
|
|
207
257
|
function getVirtualKeyboard() {
|
package/dist/keyboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/keyboard",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0-edge.1908.751021c",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/signals": "0.
|
|
42
|
-
"@flighthq/types": "0.
|
|
41
|
+
"@flighthq/signals": "0.4.0-edge.1908.751021c",
|
|
42
|
+
"@flighthq/types": "0.4.0-edge.1908.751021c"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"typescript": "^5.3.0"
|
package/src/keyboard.test.ts
CHANGED
|
@@ -34,6 +34,10 @@ import {
|
|
|
34
34
|
setSoftKeyboardScrollAssistEnabled,
|
|
35
35
|
setSoftKeyboardStyle,
|
|
36
36
|
showSoftKeyboard,
|
|
37
|
+
explainSoftKeyboardBackend,
|
|
38
|
+
installSoftKeyboardHostBackend,
|
|
39
|
+
observeSoftKeyboardHostResult,
|
|
40
|
+
resetSoftKeyboardBackendForTest,
|
|
37
41
|
} from './keyboard';
|
|
38
42
|
|
|
39
43
|
type BackendListener = (phase: SoftKeyboardPhase, transition: Readonly<SoftKeyboardTransition>) => void;
|
|
@@ -670,6 +674,34 @@ describe('disposeSoftKeyboard', () => {
|
|
|
670
674
|
});
|
|
671
675
|
});
|
|
672
676
|
|
|
677
|
+
describe('explainSoftKeyboardBackend', () => {
|
|
678
|
+
afterEach(() => resetSoftKeyboardBackendForTest());
|
|
679
|
+
|
|
680
|
+
it('reports host-not-enabled when no backend is installed', () => {
|
|
681
|
+
resetSoftKeyboardBackendForTest();
|
|
682
|
+
const explanation = explainSoftKeyboardBackend();
|
|
683
|
+
expect(explanation.layer).toBe('host-not-enabled');
|
|
684
|
+
expect(explanation.conflict).toBe(false);
|
|
685
|
+
expect(explanation.viability).toBe('unobserved');
|
|
686
|
+
});
|
|
687
|
+
|
|
688
|
+
it('reports custom layer when a custom backend is set', () => {
|
|
689
|
+
setSoftKeyboardBackend(fakeBackend());
|
|
690
|
+
expect(explainSoftKeyboardBackend().layer).toBe('custom');
|
|
691
|
+
});
|
|
692
|
+
|
|
693
|
+
it('reports host layer when a host backend is installed', () => {
|
|
694
|
+
installSoftKeyboardHostBackend(fakeBackend());
|
|
695
|
+
expect(explainSoftKeyboardBackend().layer).toBe('host');
|
|
696
|
+
});
|
|
697
|
+
|
|
698
|
+
it('reports conflict when two different host backends are installed', () => {
|
|
699
|
+
installSoftKeyboardHostBackend(fakeBackend());
|
|
700
|
+
installSoftKeyboardHostBackend(fakeBackend());
|
|
701
|
+
expect(explainSoftKeyboardBackend().conflict).toBe(true);
|
|
702
|
+
});
|
|
703
|
+
});
|
|
704
|
+
|
|
673
705
|
describe('getSoftKeyboardBackend', () => {
|
|
674
706
|
it('falls back to a web backend', () => {
|
|
675
707
|
expect(getSoftKeyboardBackend()).not.toBeNull();
|
|
@@ -752,6 +784,25 @@ describe('hideSoftKeyboard', () => {
|
|
|
752
784
|
});
|
|
753
785
|
});
|
|
754
786
|
|
|
787
|
+
describe('installSoftKeyboardHostBackend', () => {
|
|
788
|
+
afterEach(() => resetSoftKeyboardBackendForTest());
|
|
789
|
+
|
|
790
|
+
it('installs a host backend that getSoftKeyboardBackend returns', () => {
|
|
791
|
+
const backend = fakeBackend();
|
|
792
|
+
installSoftKeyboardHostBackend(backend);
|
|
793
|
+
expect(getSoftKeyboardBackend()).toBe(backend);
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
it('is first-host-wins: a second different backend sets conflict', () => {
|
|
797
|
+
const first = fakeBackend();
|
|
798
|
+
const second = fakeBackend();
|
|
799
|
+
installSoftKeyboardHostBackend(first);
|
|
800
|
+
installSoftKeyboardHostBackend(second);
|
|
801
|
+
expect(getSoftKeyboardBackend()).toBe(first);
|
|
802
|
+
expect(explainSoftKeyboardBackend().conflict).toBe(true);
|
|
803
|
+
});
|
|
804
|
+
});
|
|
805
|
+
|
|
755
806
|
describe('isSoftKeyboardAccessoryBarVisible', () => {
|
|
756
807
|
it('delegates to backend getAccessoryBarVisible', () => {
|
|
757
808
|
const backend = fakeBackend();
|
|
@@ -800,6 +851,36 @@ describe('isSoftKeyboardScrollAssistEnabled', () => {
|
|
|
800
851
|
});
|
|
801
852
|
});
|
|
802
853
|
|
|
854
|
+
describe('observeSoftKeyboardHostResult', () => {
|
|
855
|
+
afterEach(() => resetSoftKeyboardBackendForTest());
|
|
856
|
+
|
|
857
|
+
it('records a successful observation', () => {
|
|
858
|
+
installSoftKeyboardHostBackend(fakeBackend());
|
|
859
|
+
observeSoftKeyboardHostResult('getInfo', true);
|
|
860
|
+
const explanation = explainSoftKeyboardBackend();
|
|
861
|
+
expect(explanation.operation).toBe('getInfo');
|
|
862
|
+
expect(explanation.viability).toBe('available');
|
|
863
|
+
});
|
|
864
|
+
|
|
865
|
+
it('records a failed observation', () => {
|
|
866
|
+
installSoftKeyboardHostBackend(fakeBackend());
|
|
867
|
+
observeSoftKeyboardHostResult('getInfo', false);
|
|
868
|
+
expect(explainSoftKeyboardBackend().viability).toBe('runtime-api-unavailable');
|
|
869
|
+
});
|
|
870
|
+
});
|
|
871
|
+
|
|
872
|
+
describe('resetSoftKeyboardBackendForTest', () => {
|
|
873
|
+
it('clears all backend slots', () => {
|
|
874
|
+
setSoftKeyboardBackend(fakeBackend());
|
|
875
|
+
installSoftKeyboardHostBackend(fakeBackend());
|
|
876
|
+
observeSoftKeyboardHostResult('getInfo', true);
|
|
877
|
+
resetSoftKeyboardBackendForTest();
|
|
878
|
+
expect(explainSoftKeyboardBackend().layer).toBe('host-not-enabled');
|
|
879
|
+
expect(explainSoftKeyboardBackend().conflict).toBe(false);
|
|
880
|
+
expect(explainSoftKeyboardBackend().viability).toBe('unobserved');
|
|
881
|
+
});
|
|
882
|
+
});
|
|
883
|
+
|
|
803
884
|
describe('setSoftKeyboardAccessoryBarVisible', () => {
|
|
804
885
|
it('delegates to backend setAccessoryBarVisible', () => {
|
|
805
886
|
const backend = fakeBackend();
|