/** * Copyright (c) Nicolas Gallagher. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { createSheet } from '../dom' describe('createSheet', () => { test('creates a sheet on the client', () => { const sheet = createSheet() expect(sheet.id).toMatchInlineSnapshot(`"react-native-stylesheet"`) expect(typeof sheet.getTextContent()).toBe('string') expect(typeof sheet.insert).toBe('function') }) test('supports multiple documents with same styles', () => { const sheet = createSheet() sheet.insert('.test-sheet { opacity: 1 }', 3) // Iframe ----- const iframe = document.createElement('iframe') document.body.appendChild(iframe) const iframeDoc = iframe.contentWindow.document const iframeRootTag = document.createElement('div') iframeDoc.body.appendChild(iframeRootTag) const iframeSheet = createSheet(iframeRootTag) // Did we generate a new sheet? expect(sheet).not.toBe(iframeSheet) expect(iframeSheet.id).toMatchInlineSnapshot(`"react-native-stylesheet"`) expect(typeof iframeSheet.insert).toBe('function') expect(iframeDoc.getElementById('react-native-stylesheet')).not.toBe(null) // Does the content match existing sheets? expect(iframeSheet.getTextContent().includes('test-sheet')).toBe(true) // Does the content update when other sheets are updated? sheet.insert('.test-iframe { opacity: 0 }', 3) expect(iframeSheet.getTextContent().includes('test-iframe')).toBe(true) // ShadowDOM ----- const div = document.createElement('div') const shadowRoot = div.attachShadow({ mode: 'open' }) const shadowRootTag = document.createElement('div') shadowRoot.appendChild(shadowRootTag) document.body.appendChild(shadowRoot) const shadowSheet = createSheet(shadowRootTag) // Did we generate a new sheet? expect(sheet).not.toBe(shadowSheet) expect(shadowSheet.id).toMatchInlineSnapshot(`"react-native-stylesheet"`) expect(typeof shadowSheet.insert).toBe('function') // expect(shadowRoot.getElementById('react-native-stylesheet')).not.toBe(null); // Does the content match existing sheets? expect(shadowSheet.getTextContent().includes('test-sheet')).toBe(true) // Does the content update when other sheets are updated? sheet.insert('.test-shadow { opacity: 0 }', 3) expect(shadowSheet.getTextContent().includes('test-shadow')).toBe(true) }) })