OSSCA Chromium

기여 목록 / 8042283

base: Test no event for directory touch on Apple

BasetestMerged

Apple에서 재귀 감시 중인 디렉터리의 접근 시간과 수정 시간을 변경해도 이벤트가 발생하지 않는지 검증했습니다.

문제 설명

FilePathWatcherTest.RecursiveWatch는 디렉터리와 그 하위 경로를 재귀적으로 감시하는 테스트입니다. 기존에는 Apple에서 TouchFile()로 감시 대상 디렉터리의 접근 시간과 수정 시간을 바꾸는 단계를 건너뛰고, 이벤트가 발생하지 않는지 확인하라는 TODO만 남겨 두었습니다.

해결 내용

플랫폼 조건문을 변경해 Apple에서도 TouchFile()을 실행하도록 했습니다. Apple에서는 새 기대 이벤트를 추가하지 않고 RunUntilEventsMatch()를 호출해, 수신 이벤트 목록이 기존 기대 목록과 일치하는지 확인했습니다. 이에 따라 TODO에서도 Apple 부분을 제거했습니다.

전체 코드 diff는 다음과 같습니다.

--- a/base/files/file_path_watcher_unittest.cc
+++ b/base/files/file_path_watcher_unittest.cc
@@ -1045,20 +1045,22 @@
   delegate.RunUntilEventsMatch(event_expecter);

 // Mac and Win don't generate events for Touch.
-// TODO(crbug.com/40263777): Add explicit expectations for Mac and Win.
+// TODO(crbug.com/40263777): Add explicit expectations for Win.
 // Android TouchFile returns false.
-#if !(BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID))
+#if !(BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID))
   // Touch "$dir".
   Time access_time;
   ASSERT_TRUE(Time::FromString("Wed, 16 Nov 1994, 00:00:00", &access_time));
   ASSERT_TRUE(TouchFile(dir, access_time, access_time));
+#if !BUILDFLAG(IS_APPLE)
   // TODO(crbug.com/40263766): Investigate why we're getting two events
   // here from inotify.
   event_expecter.AddExpectedEventForPath(dir);
   event_expecter.AddExpectedEventForPath(dir);
+#endif  // !BUILDFLAG(IS_APPLE)
   delegate.RunUntilEventsMatch(event_expecter);
   // TODO(crbug.com/40263777): Add a test touching `subdir`.
-#endif  // !(BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID))
+#endif  // !(BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID))

   // Create "$dir/subdir/subdir_file1".
   FilePath subdir_file1(subdir.AppendASCII("subdir_file1"));

테스트 방법

CL에 기록한 테스트는 다음과 같습니다.

base_unittests --gtest_filter=FilePathWatcherTest.RecursiveWatch

CQ를 거쳐 2026년 7월 8일(한국 시간) Chromium main에 병합되었습니다.

배운 점

  • 플랫폼별 테스트를 활성화할 때는 동작을 실행하는 조건과 기대 이벤트를 추가하는 조건을 구분해, 각 플랫폼에 맞게 빌드 플래그를 설정해야 합니다.

참고 자료