Files
Alex Hunt 0c947c8d94 Fix diffApiSnapshot-test (#54903)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/54903

A bit too trigger happy on D89287801(!)

Changelog: [Internal]

Reviewed By: cipolleschi

Differential Revision: D89292895

fbshipit-source-id: 793d984253dcf24c394adc8c8646992caf17805d
2025-12-16 10:04:16 -08:00

141 lines
4.1 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
* @oncall react_native
*/
'use strict';
const {Result, diffApiSnapshot} = require('../diffApiSnapshot');
describe('diffApiSnapshot', () => {
test('should detect breaking change when a statement is deleted', () => {
const prevSnapshot = `
import * as React from 'react';
declare type AccessibilityActionEvent = NativeSyntheticEvent<
Readonly<{
actionName: string;
}>
>;
declare const AccessibilityInfo: typeof AccessibilityInfo_2;
declare const DeletedExport: string;
export {
AccessibilityActionEvent, // 00000001
AccessibilityInfo, // 00000002
DeletedExport, // 00000003
}
`;
const newSnapshot = `
import * as React from 'react';
declare type AccessibilityActionEvent = NativeSyntheticEvent<
Readonly<{
actionName: string;
}>
>;
declare const AccessibilityInfo: typeof AccessibilityInfo_2;
export {
AccessibilityActionEvent, // 00000001
AccessibilityInfo, // 00000002
}
`;
const res = diffApiSnapshot(prevSnapshot, newSnapshot);
expect(res.result).toBe(Result.BREAKING);
expect(res.changedApis).toEqual(['DeletedExport']);
});
test('should detect potentially breaking change when a statement is changed', () => {
const prevSnapshot = `
import * as React from 'react';
export declare type AccessibilityActionEvent = NativeSyntheticEvent<
Readonly<{
actionName: string;
}>
>;
export declare const Foo: string;
export {
AccessibilityActionEvent, // 00000001
Foo, // 00000002
}
`;
const newSnapshot = `
import * as React from 'react';
export declare type AccessibilityActionEvent = NativeSyntheticEvent<
Readonly<{
actionName: string;
}>
>;
export declare const Foo: number;
export {
AccessibilityActionEvent, // 00000001
Foo, // 00000003
}
`;
const res = diffApiSnapshot(prevSnapshot, newSnapshot);
expect(res.result).toBe(Result.POTENTIALLY_BREAKING);
expect(res.changedApis).toEqual(['Foo']);
});
test('should detect potentially non-breaking change when a statement is added', () => {
const prevSnapshot = `
import * as React from 'react';
declare type AccessibilityActionEvent = NativeSyntheticEvent<
Readonly<{
actionName: string;
}>
>;
declare const AccessibilityInfo: typeof AccessibilityInfo_2;
export {
AccessibilityActionEvent, // 00000001
AccessibilityInfo, // 00000002
}
`;
const newSnapshot = `
import * as React from 'react';
declare type AccessibilityActionEvent = NativeSyntheticEvent<
Readonly<{
actionName: string;
}>
>;
declare const AccessibilityInfo: typeof AccessibilityInfo_2;
declare const NewExport: string; // New export added
export {
AccessibilityActionEvent, // 00000001
AccessibilityInfo, // 00000002
NewExport, // 00000003
}
`;
const res = diffApiSnapshot(prevSnapshot, newSnapshot);
expect(res.result).toBe(Result.POTENTIALLY_NON_BREAKING);
expect(res.changedApis).toEqual(['NewExport']);
});
test('should detect non-breaking change when nothing is changed', () => {
const prevSnapshot = `
import * as React from 'react';
declare type AccessibilityActionEvent = NativeSyntheticEvent<
Readonly<{
actionName: string;
}>
>;
declare const AccessibilityInfo: typeof AccessibilityInfo_2;
export {
AccessibilityActionEvent, // 00000001
AccessibilityInfo, // 00000002
}
`;
const res = diffApiSnapshot(prevSnapshot, prevSnapshot);
expect(res.result).toBe(Result.NON_BREAKING);
expect(res.changedApis).toEqual([]);
});
});